我有以下功能:
function ipfsRetrieve( ipfsHash ){
return new Promise( function( resolve, reject ) {
ipfs.catJSON( ipfsHash, (err, result) => {
if (err){
reject(err);
}
resolve( result);
});
});
}
现在,当我在循环内调用此函数时,如下所示:
var hashArray = [ "QmTgsbm...nqswTvS7Db",
"QmR6Eum...uZuUckegjt",
"QmdG1F8...znnuNJDAsd6",
]
var dataArray = [];
hashArry.forEach(function(hash){
ipfsRetrieve( hash ).then(function(data){
dataArray.push(data);
});
});
return dataArray
“return dataArray”行返回一个空数组。我应该如何更改此代码以使“dataArray”填充从 IPFS 检索的数据?
最佳答案
您应该使用Promise.all
。
构造一个 Promise 数组,然后使用该方法等待所有 Promise 履行,之后您可以按正确的顺序使用该数组:
let hashArray = ["QmTgsbm...nqswTvS7Db",
"QmR6Eum...uZuUckegjt",
"QmdG1F8...znnuNJDAsd6",
]
// construct Array of promises
let hashes = hashArray.map(hash => ipfsRetrieve(hash));
Promise.all(hashes).then(dataArray => {
// work with the data
console.log(dataArray)
});
关于javascript - 在循环内调用异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51731443/