我认为我正在寻找 promise ,但我不知道如何在我的案例中使用它。
我想 console.log('ended')
只有当我所有的异步代码都完成时。
我有一个 DZ.api 的回调,但没有 forEach()
,最好的方法是什么?
_.forEach(filteredTracks, function(n) {
DZ.api('/playlist/'+ n.id +'/tracks', function(response) {
_.forEach(response.data, function(n) {
SP.api('/search/'+n.title, function(response) {
console.log(response);
});
});
});
});
console.log('ended');
最佳答案
您正在寻找 Promise.all -> Promise.all(arrayOfPromise).then(function (result) {})
使用您当前的代码,如果 SP.api 已经与 Promise 兼容,只需执行以下操作:
_.map(filteredTracks, function(n) {
return DZ.api('/playlist/'+ n.id +'/tracks')
.then(function (response) {
_.map(response.data, function(n) {
return SP.api('/search/'+n.title);
});
return Promises.all(response.data);
});
});
});
Promise.all(filteredTracks)
.then(function (results) {
console.log('ended');
});
如果 SP.api 和 DZ Api 没有返回 Promise,您可以:
Promisify SP.api DZ Api 和并且使用我之前写的相同代码
或者在 ._map 中返回 promises
_.map(filteredTracks, function(n) {
var promise = new Promise(function (resolve, reject) {
DZ.api('/playlist/'+ n.id +'/tracks', function (response) {
_.map(response.data, function(n) {
var insidePromise = new Promise(function (resolve, reject) {
return SP.api('/search/'+n.title, function (result) {
resolve(result);
});
})
return insidePromise;
});
resolve(Promises.all(response.data));
});
});
});
return promise;
});
Promise.all(filteredTracks).then(function (results) {
console.log('ended');
});
关于javascript - 如何使用异步代码在 forEach 循环上进行 promise /回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32847857/