D-M*_*arc 1 javascript promise es6-promise
如果我正在进行如下的异步调用,如何使用promises链接它们,那么我可以按顺序执行操作?在这个例子中,最终发生的事情是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);
}
Run Code Online (Sandbox Code Playgroud)
假设您的ajax调用实际上可以并行运行,并且您只想按顺序运行结果,那么您可以使用ajax函数并按Promise.all()顺序获取所有结果:
// promisify the ajax call
function fbAPIPromise(path, args) {
return new Promise(function(resolve, reject) {
FB.api(path, args, function(results) {
if (!result) return resolve(null);
if (result.error) return reject(result.error);
resolve(result);
});
});
}
var promises = [];
for (var x = 0; x < 10; x++) {
promises.push(fbAPIPromise('/' + fbArrOfAlbumNames[x] + '/photos/', {fields: 'picture,album'});
}
Promise.all(promises).then(function(results) {
// results is an array of results in original order
}).catch(function(err) {
// an error occurred
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1478 次 |
| 最近记录: |