在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")
});
});
}