2016-06-21 79 views
-2

我在一個循環中調用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

我在您發佈的代碼中沒有看到任何'obj',您的意思是哪個值? – Bergi

+0

@Bergi,我添加了調用代碼。 obj應該是addToCollectionMap的結果 – Nelson

+1

不是,你使用了,然後讓它等於所有promise的結果。 –

回答

0

.then將返回由Promise.all(promises)創建的承諾,因此它具有所有承諾的結果。您只需要另一個.then即可返回您想要的內容。

}).then(function() { 
    return Promise.all(promises); 
}).then(function() { 
    return assetIds; 
});