gpt4 book ai didi

javascript - 将已解决的 Promise 作为属性添加到对象

转载 作者:行者123 更新时间:2023-11-30 20:36:59 24 4
gpt4 key购买 nike

我正在开发一个基于以太坊的 Dapp,但我被 Promises 困住了。

在for循环中,数组的元素要一一验证。这发生在 validateRow() 函数中,该函数首先返回一个 Promise。 Promise 将被解析为一个数字(0,当元素有效时;1、2 或 3,当它无效时)。

最后,我想返回一个resultList[],它是一个对象数组。每个对象都应该有两个属性:

  1. row,包含元素(字符串),
  2. result,判断是否有效。

但是,resultList[] 只包含末尾的行,而 'then' 分支只包含结果 ({"row":"","re​​sult": “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;

最佳答案

在 Javascript 中,使用正斜杠来表示注释,而不是反斜杠,否则会出现语法错误。

使用 Promise.all 在返回对象之前等待所有的 promise 被解决:

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 作为 promise 使用,因为它不会同步运行。例如

const resultList = await getResultList();

关于javascript - 将已解决的 Promise 作为属性添加到对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49722662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com