Javascript 将已解析的承诺作为属性添加到对象
我正在开发一个基于以太坊的Dapp,我被承诺所束缚 在for循环中,必须逐个验证阵列的元素。这发生在Javascript 将已解析的承诺作为属性添加到对象,javascript,promise,Javascript,Promise,我正在开发一个基于以太坊的Dapp,我被承诺所束缚 在for循环中,必须逐个验证阵列的元素。这发生在validateRow()函数中,该函数首先返回一个承诺。承诺将解析为一个数字(当元素有效时为0;当元素无效时为1、2或3) 最后,我想返回一个resultList[],它是一个对象数组。每个对象应具有两个属性: 行,包含元素(字符串) 和结果,它告诉您它是否有效 但是,resultList[]只包含末尾的行,而“then”分支只保存结果({“row”:“,“result”:“0”})。我添加了在
validateRow()
函数中,该函数首先返回一个承诺。承诺将解析为一个数字(当元素有效时为0;当元素无效时为1、2或3)
最后,我想返回一个resultList[]
,它是一个对象数组。每个对象应具有两个属性:
行
,包含元素(字符串)结果
,它告诉您它是否有效resultList[]
只包含末尾的行,而“then”分支只保存结果({“row”:“,“result”:“0”}
)。我添加了在控制台中作为注释打印的日志。不幸的是,我不知道如何把这两者结合起来
var resultList = [];
for (var i = 0; i < App.resultArray.length; i++) {
var promiseReturned = contractInstance.validateRow.call(App.resultId, App.resultArray[i]);
console.log(promiseReturned); //Promise {<pending>}
var rowObject = new Object();
console.log(App.resultArray[i]); //row1string
rowObject.row = App.resultArray[i];
promiseReturned.then(function(returnVal) {
console.log("the returnVal: " + returnVal); //the returnVal: 1
rowObject.result = returnVal;
console.log("the rowObject :" + JSON.stringify(rowObject)); //{"row":"","result":"0"}
return returnVal;
});
resultList.push(rowObject);
};
console.log(resultList); //[{"row":"row1string"},{"row": "row2string"}]
return resultList;
var resultList=[];
对于(var i=0;i
在Javascript中,使用前斜杠表示注释,而不是反斜杠,否则会出现语法错误
使用Promise.all
等待解决所有承诺,然后返回对象:
async function getResultList() {
const allPromises = App.resultArray.map((row) => (
contractInstance.validateRow.call(App.resultId, row)
.then(result => ({ result, row }))
));
const resultList = await Promise.all(allPromises);
return resultList; // This will return a Promise to the caller of getResultList
}
注意,您必须使用getResultList
作为承诺,因为它不是同步运行的。乙二醇
const resultList=await getResultList()代码>对象没有参数-只有函数有参数。对象是有属性的。没错,对不起,没错。我真的不知道我为什么写这样的评论,我想我应该慢慢睡觉。所以,我想你的建议应该是正确的答案,但它给我带来了一个新问题。当我尝试将您的函数插入到我的代码中时,我收到一个错误,说“等待仅在异步函数中有效”,我现在无法解决它。请参见顶部的异步函数
?您必须确保您发布的块所在的任何函数都是异步函数。是的,但是如果我只是简单地将async关键字添加到我的函数中,错误仍然存在,因此这可能是一件非常愚蠢的事情。我将我的JS代码添加到一个提琴中,我想调用第130行的函数:您可能会建议我,我如何更正它?您已经在使用Promission和,然后,所以不需要等待,只需使用/返回getResultList返回的Promission即可。