我的for循环在1次迭代后不断停止

时间:2018-07-30 23:18:02

标签: for-loop ecmascript-6 for-of-loop

由于某种原因,我的for循环在1次迭代后继续停止。

我期望得到一个console.log,其中包含2 assetId和2个价格,但是相反,我仅获得了1 assetId和1个价格。然后,我可以获得合适响应的唯一方法是,当我通过刷新重新运行该函数时(b / c它会检查我的localStorage并查看旧值是否已经存在),是否有一个想法在一次迭代后停止?

   main = async () => {
        await eth.connect({
          provider: "https://mainnet.infura.io/[key-goes-here]",
          contracts: [landRegistry, marketplace]
        });


    const response = await axios.get(
      "https://api.decentraland.org/parcels?status=open"
    );
    const viableProperties = response.data.data.parcels.filter(parcel => parcel.publication.price <= this.state.landPrice);
    for(let [key, value] of viableProperties.entries()) {
      const cost = value.publication.price;
      const asset = value.publication.asset_id;
      const commaPos = asset.indexOf(",");
      const coordinatesLat = parseFloat(asset.substring(0, commaPos));
      const coordinatesLong = parseFloat(
        asset.substring(commaPos + 1, asset.length)
      );
      const price = eth.utils.toWei(cost);
      const oldProperty = localStorage.getItem(asset)
      if (cost <= this.state.landPrice && oldProperty == null) {
        localStorage.setItem(asset, key);
        const assetId = await landRegistry.encodeTokenId(
          coordinatesLat,
          coordinatesLong
        );
        await marketplace.executeOrder(assetId, price)
      }
    } 
  };

****编辑****-我目前在那儿等待marketplace.executeOrder ...我曾经有console.log(asset,price)

1 个答案:

答案 0 :(得分:1)

因此,既然您已经向我们展示了带有以下内容的真实代码:

await marketplace.executeOrder(assetId, price)

其中似乎有一个for循环停止的合理原因。如果marketplace.executeOrder()的承诺返回,拒绝或引发同步异常,则async函数将立即拒绝其承诺并停止进一步执行任何操作。

如果您希望即使承诺失败也能继续循环,则可以使用try/catch.catch()来捕获被拒绝的承诺。


请将此作为将来的建议,以在问题中包含尽可能多的真实代码。如果您遗漏了您认为不是问题的一部分,那么您可能只是向试图帮助您的人员隐藏了真正的问题(这种情况在这里经常发生,这确实减慢了我们的帮助能力)。