【发布时间】:2017-08-25 02:18:25
【问题描述】:
如果我正在执行如下所示的异步调用,如何将它们与 Promise 链接起来,以便我可以按顺序执行操作?在这个例子中,最终发生的事情是arr 将推动项目乱序。我更喜欢有承诺的答案,但只要有效,任何事情都会做
var fbArrOfAlbumNames = ['Profile Pictures', 'Cover Photos', 'Mobile Uploads'];
var arr = [];
for(var x = 0; x < fbArrOfAlbumNames.length; x++) {
(function(cntr) {
FB.api('/' + fbArrOfAlbumNames[cntr] + '/photos/', {fields: 'picture,album'}, function(response) {
arr.push(response);
}
})(x);
}
【问题讨论】:
-
您的意思是这段代码是
ajaxCallFbAPI(someArgs, function(err, data) {...});您在问题中显示的内容看起来不像典型的异步API。 -
链接异步代码以同步运行有点违背了它的目的。我要尝试的第一件事是使用Promise.all() 并在它们全部完成后将您的响应添加到您的数组中,这至少允许它运行的速度与最慢的调用一样慢,而不是所有它们的累积时间。
-
@jfriend00 是的,你是对的。我故意简洁,因为它的细节并不重要。可以是任何异步调用。
-
我和@jfriend00有同样的想法,他的例子真的很好。
-
嗯,细节很重要。为什么不将问题中的示例修复为至少是合法的异步调用,以便人们可以更具体地为您提供帮助(您可以使用“编辑”链接来修复它)。一般来说,当你展示你的实际代码时,你会得到更好、更相关和更详细的答案,而不是一些假想的代码示例。魔鬼往往在细节中,只有当我们看到您的实际代码时,我们才能彻底。此外,当我们看到真正的问题和真正的代码时,我们更有可能为您提供您甚至不知道的问题。
标签: javascript promise es6-promise