在JavaScript中使用.then时遇到一些问题。我有一个提取函数,然后使用结果更新价格数组。我想让更新功能等待提取功能结束。我不能成功有任何想法吗 ?
谢谢

function FetchPrices() {
    return new Promise(function(resolve, reject) {
        console.log("j'entre dans FetchPrices")
        var call = 'https://min-api.cryptocompare.com/data/pricemulti?fsyms='+ GetCoinsListToFetch() + '&tsyms=BTC,USD,EUR&api_key=55baa6d4b58517d610476c';
        fetch(call)
        .then(function (response) {
            response.json()
            .then(function (value) {
                console.log("je suis dans le .then du fetch")
                var v = value
                pricesList = v;
                console.log(v);
                console.log("fin du fetch")

            });
        });
    })
}


function UpdatePrices() {
    console.log("j'entre dans UpdatePrices")
    console.log(assetList)
    for (asset of assetList) {
        var tempName = asset.Coin
        tempName = tempName.toUpperCase()
        var temppbtc = pricesList[tempName].BTC
        var temppeur = pricesList[tempName].EUR
        asset.Prixeuro = temppeur
        asset.Prixbtc = temppbtc
        asset.Totaleuro = asset.Quantity * asset.Prixeuro
    }

}


async function Test2 () {
    console.log("j'entre dans test2");
    await FetchPrices().then(()=>UpdatePrices())
}


似乎在完成第一个FetchPrices之后就没有第二个功能UpdatePrices

最佳答案

不调用第二个函数,因为没有解析第一个函数返回的promise(因为从未调用resolve)。您可以通过调用resolve()手动解决它,但最好只返回由fetch函数创建的promise:

function FetchPrices() {
  console.log("j'entre dans FetchPrices")
  var call = 'https://min-api.cryptocompare.com/data/pricemulti?fsyms='+ GetCoinsListToFetch() + '&tsyms=BTC,USD,EUR&api_key=440f35b466d7a82c3f7f94fd64f6436155c272410055baa6d4b58517d610476c';
  return fetch(call)
    .then(function (response) {
      response.json()
        .then(function (value) {
          console.log("je suis dans le .then du fetch")
          var v = value
          pricesList = v;
          console.log(v);
          console.log("fin du fetch")

        });
    });
}

10-07 21:11