最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

如何在promises中使用循环

运维笔记admin17浏览0评论

如何在promises中使用循环

如何在promises中使用循环

我试图在承诺中执行for循环但没有成功,我认为我的问题与调用resolve的位置有关,但我不确定

/*
* Get conversations of user
* @param user {String}
*/
function getConversations(user){
	return new Promise(function(resolve, reject){
		var conversations = user.Conversations
		var newConversations = []
		for(var conversation of conversations) {
			helperGetConvo(conversation.ConversID).then(function(convo){
				newConversations.push(createConversationObject({messages:[], name:convo.conversationName, users:["broulaye", "doumbia"], Id:convo.conversationID}))


			}).catch(function(reason) {
				console.log("failure when finding conversation 2: " + reason)
			})

		}
		resolve(newConversations)



	})
}


function helperGetConvo(convoId) {
	return new Promise (function(resolve, reject){
		query.findConversation(convoId).then(function(convers) {

			if(convers) {
				console.log("conversation was found: " + convers)
			}
			else {
				console.log("conversation was not found: " + convers)
			}
			resolve(convers)
		}).catch(function(reason) {
			console.log("failure when finding conversation: " + reason)
		})


	})
}
回答如下:

你需要使用Promise.all

function getConversations(user){
    var conversations = user.Conversations
    var promises = conversations.map(c=>helperGetConvo(c.ConversID))

    return Promise.all(promises)
        .then(data=>{
            let newConversations = data.map(convo=>{
                return createConversationObject({messages:[], name:convo.conversationName, users:["broulaye", "doumbia"], Id:convo.conversationID})
            })
            return newConversations
        })
        .catch(reason=>{
            console.log("failure when finding conversation: " + reason)
        })
}

使用这样的功能

getConversations(user).then(newConversations=>{
    //your code
})

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论