兑现对象

时间:2019-05-04 16:43:46

标签: node.js

如果您有一个看起来像这样的功能:

async function foo() {
  const myString = 'some string';
  const myInt = 5;

  const promise1 = fetchData();  // An async function returning a promise
  const promise2 = fetchSomeOtherData(); // An async function returning a promise

  return {
    myString,
    myInt,
    promise1,
    promise2,
  }
}

对我来说,fetchData()fetchSomeOtherData()同时执行(这意味着对这两者同时添加waiting将不是有效的解决方案)对我来说很重要,这是使调用函数时,promise就会解决。 我在考虑Promise.all()的含义,只是针对其中包含一些promise而不是数组的对象。 对我来说,同样重要的是,我的对象应保持其原样。 我知道Promise.all()有一些变通方法,您可以将对象转换为数组,然后再进行重构,但这并没有我想要的那么干净。

我要使用该函数并兑现承诺的方式如下:

const object = await foo();

它应该解决两个诺言

1 个答案:

答案 0 :(得分:1)

async function foo() {
  const myString = 'some string';
  const myInt = 5;

  const promise1 = fetchData();
  const promise2 = fetchSomeOtherData();
  return {
    myString,
    myInt,
    promise1: await promise1,
    promise2: await promise2,
  }
}

诺言不需要await.then()即可开始执行。一旦创建它,​​它便开始运行,并且await / .then()只是检索执行结果而不是触发执行的两种方法。因此,当您运行fetchData()fetchSomeOtherData()时,它们都会立即开始执行,并且第二个调用不会等待第一个调用。