亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何等待所有 .then 完成后再返回值

如何等待所有 .then 完成后再返回值

C
三國紛爭 2023-07-29 14:48:36
我有以下功能const getQuotes = symbol => {  let quotes = {};  new DeltaRestClient(api_key, api_secret).then(client => {    const linkOptions = createIdentifiers(symbol, false);    Object.entries(linkOptions).forEach(entry => {      client.apis.Products.getTicker({ symbol: entry[1] }).then(response => {        const ticker = JSON.parse(response.data.toString());        quotes[entry[0]] = parseFloat(ticker.result.close);      });    });  });  return quotes;};我稱之為const start = async () => {  const quotes = await getQuotes("ABCD");  console.log(quotes);};但由于異步性,getQuotes 在所有 .then 解析之前返回,并返回一個空對象。如何更改此設置,以便僅在解決所有 .then 時才返回該值?
查看完整描述

1 回答

?
慕的地10843

TA貢獻1785條經驗 獲得超8個贊

您也必須在您調用的函數中等待:


const getQuotes = async symbol => {

  let quotes = {};

  const client = await new DeltaRestClient(api_key, api_secret);

  const linkOptions = createIdentifiers(symbol, false);


  for (const entry of Object.entries(linkOptions)) {

      const response = await client.apis.Products.getTicker({ symbol: entry[1] });

      const ticker = JSON.parse(response.data.toString());

      quotes[entry[0]] = parseFloat(ticker.result.close);

  }

  return quotes;

};

并相應地調用它:


const start = async () => {

  const quotes = await getQuotes("ABCD");

  console.log(quotes);

};

一般來說,混合 async/await 和 Promise.then/.catch 會導致容易被誤解的可疑代碼。


如果您愿意,您可以通過解構條目元素來提高可讀性:


  for (const [key, symbol] of Object.entries(linkOptions)) {

      const response = await client.apis.Products.getTicker({ symbol, });

      const ticker = JSON.parse(response.data.toString());

      quotes[key] = parseFloat(ticker.result.close);

  }


查看完整回答
反對 回復 2023-07-29
  • 1 回答
  • 0 關注
  • 487 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號