我正在用JavaScript编写这段代码
preDefineListName = ['Applied', 'Test taken', 'SWS Interview', 'Candidate', 'Rejected'];
for (var i = 0; i < preDefineListName.length; i++) {
Trello.addList(data.id, preDefineListName[i]);
};
Trello.addList = function (trelloBoardId, listName) {
return $http.post('https://api.trello.com/1/lists', {
idBoard: trelloBoardId,
name: listName,
key: trelloKey,
token: trelloToken
});
};
现在位于for循环中的函数Trello.addList上面,在trello.com上创建了一个列表,其中具有preDefineListName中的给定名称。问题是列表在传递时没有按顺序出现。
我应该怎么做才能使其顺序正确。而且我必须在循环中调用函数,所以我无法更改它。
最佳答案
您的Trello.addList
返回Promise并且是异步的(因为它执行http调用)。因此,您还需要一个异步循环而不是for
循环。这将是.forEach
列表上的preDefineListName
调用。
但是,您也可以使用.map
,它使您可以返回Trello.addList
调用的结果,然后使用$q.all
等待所有addList调用完成:
$q.all(preDefineListName.map(function(name) {
return Trello.addList(data.id, name);
})).then(function success(results) {
// do something with the results
}, function error(reasons) {
// handle errors here
});