Javascript 将已解析的承诺作为属性添加到对象

Javascript 将已解析的承诺作为属性添加到对象,javascript,promise,Javascript,Promise,我正在开发一个基于以太坊的Dapp,我被承诺所束缚 在for循环中,必须逐个验证阵列的元素。这发生在validateRow()函数中,该函数首先返回一个承诺。承诺将解析为一个数字(当元素有效时为0;当元素无效时为1、2或3) 最后,我想返回一个resultList[],它是一个对象数组。每个对象应具有两个属性: 行,包含元素(字符串) 和结果,它告诉您它是否有效 但是,resultList[]只包含末尾的行,而“then”分支只保存结果({“row”:“,“result”:“0”})。我添加了在

我正在开发一个基于以太坊的Dapp,我被承诺所束缚

在for循环中,必须逐个验证阵列的元素。这发生在
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即可。