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

我有以下功能


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 时才返回该值?


三国纷争
浏览 329回答 1
1回答

慕的地10843

您也必须在您调用的函数中等待: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);  }
打开App,查看更多内容
随时随地看视频慕课网APP