我在循环中调用promise函数,我希望能够返回它的所有promise并返回一个值(assetIds)。但是我在调用函数(addToCollectionMap)后obj.assetIds是未定义的。
function addToCollectionMap(client, json, collectionId) {
var promises = [];
var assetIds = [];
return new Promise(function (resolve) {
var list = JSON.parse(json)["list"];
list.forEach(function (asset) {
var assetId = asset["id"];
assetIds.push(assetId);
promises.push(setToCache(client, PREFIX + assetId, collectionId));
});
promises.push(resolve({assetIds: assetIds}));
}).then(function () {
return Promise.all(promises);
});
}
致电代码:
return addToCollectionMap(client, jsonString, collectionId)
.then(function (obj) {
return setToCache(client, ASSET_MAP_PREFIX + collectionId, obj.assetIds);
});
答案 0 :(得分:1)
您的.then
正在返回Promise.all(promises)
创建的承诺,因此它将获得所有承诺的结果。您只需要另一个.then
来返回您想要的内容。
}).then(function () {
return Promise.all(promises);
}).then(function () {
return assetIds;
});