![](/img/trans.png)
[英]Function returning promise instead of value - react-native / javascript
[英]Returning value instead of promise in useEffect in React
我有以下代碼,
let currencyValues = [];
const retrieveCurrencyPairs = async (pair) => {
const r = await fetch(pair.url);
const rParsed = await r.json();
let newCurrencyValue = { currency: pair.countries, value: rParsed };
return newCurrencyValue;
};
useEffect(() => {
currencyValues = currencyPairs.map(retrieveCurrencyPairs);
console.log(currencyValues);
}, []);
以及以下期望:
useEffect
觸發 map() 內部的 functionretrieveCurrencyPairs()
並等待結果,然后返回結果currencyValues
數組填充了 3 個新對象不幸的是 function 返回的是承諾,而不是對象。
關於如何返回對象的任何提示?
異步函數總是返回承諾。 你可以這樣做:
Promise.all(currencyPairs.map(retrieveCurrencyPairs))
.then( results => ... )
Promise.all具有並行運行它們而不是順序運行它們的額外好處。
如果您想處理個別失敗/拒絕而不拒絕整個列表,您可以考慮Promise.allSettled 。
我認為你應該使用Promise.all
來正確處理多個承諾
useEffect(() => {
(async()=>{
const results = await Promise.all(currencyPairs.map(retrieveCurrencyPairs))
console.log(results );
})()
}, []);
要么
useEffect(() => {
const results = Promise.all(currencyPairs.map(retrieveCurrencyPairs)).then(results => console.log(results));
}, []);
要了解有關Promise.all
更多信息或要了解有關Promise.allSettled
更多信息,請使用 MDN
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled
試試這個
useEffect(() => {
(async()=>{
currencyValues = await currencyPairs.map(retrieveCurrencyPairs);
console.log(currencyValues);
})()
}, []);
異步函數總是隱式地返回承諾。 您需要要么等待.then
currency.Pairs.map(retrieveCurrencyPairs)
要么。然后它
由於Promise.all
答案已經發布並且是堅持使用一種方法的好習慣,這里是await
的替代方法
useEffect(() => {
const getCurrencyValues = async ()=>{
const currencyValues = await currencyPairs.map(retrieveCurrencyPairs);
return currencyValues
}
console.log(getCurrencyValues());
}, []);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.