为了账号安全,请及时绑定邮箱和手机立即绑定

如何等待所有 .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 关注
  • 422 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信