为什么要在变量中存储Promise对象?

普亚·阿塔伊

让我们假设我们有一个函数可以解决如下承诺:

function timeoutPromise(interval) {
  return new Promise((resolve, reject) => {
    setTimeout(function(){
      resolve("done");
    }, interval);
  });
};

并假设我们以两种不同的方式在异步函数中调用该函数;

缓慢的同步方式:

async function timeTest() {
  await timeoutPromise(3000);
  await timeoutPromise(3000);
  await timeoutPromise(3000);
}

在这里,我们只是直接等待所有三个timeoutPromise()调用。随后的每一个被迫等待直到最后一个完成,这将导致大约9秒的总运行时间。

和快速的异步方式

async function timeTest() {
  const timeoutPromise1 = timeoutPromise(3000);
  const timeoutPromise2 = timeoutPromise(3000);
  const timeoutPromise3 = timeoutPromise(3000);

  await timeoutPromise1;
  await timeoutPromise2;
  await timeoutPromise3;
}

在这里,我们将三个Promise对象存储在变量中,这具有抵消所有关联对象同时运行的作用。这将导致总运行时间约为3秒。

但是问题是,为什么将Promise对象存储在变量中会影响它们同时运行的相关进程引擎盖下会发生什么?

费利克斯·克林
await foo();
await bar();

将仅解决由返回的bar承诺调用(并因此创建第二个承诺)foo

var x = foo();
var y = bar();
await x;

调用bar(从而创建第二个promise),然后再foo解析返回的promise

这就是使承诺“并发”的原因。如果console.log在不同位置添加,您将看到执行上的差异:

function timeoutPromise(name, interval) {
  return new Promise((resolve, reject) => {
    console.log(`Promise ${name} created.`);
    setTimeout(function(){
      console.log(`Promise ${name} resolved.`);
      resolve("done");
    }, interval);
  });
};

async function timeTest1() {
  console.log('test 1');
  await timeoutPromise(1, 3000);
  console.log('between promise 1 and 2');
  await timeoutPromise(2, 3000);
}

async function timeTest2() {
  console.log('test 2');
  const timeoutPromise1 = timeoutPromise(1, 3000);
  console.log('between promise 1 and 2');
  const timeoutPromise2 = timeoutPromise(2, 3000);

  await timeoutPromise1;
  console.log('between promise 1 and 2 with await');
  await timeoutPromise2;
}

timeTest1().then(timeTest2);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Linux

为什么我需要在TensorFlow中初始化变量?

来自分类Java

为什么Final变量不需要在Java的main方法中初始化?

来自分类Dev

级联的Promise中缺少对象变量

来自分类Javascript

为什么函数的自变量不是JavaScript中的数组对象?

来自分类Javascript

为什么要在JavaScript变量的名称中使用$(美元符号)?

来自分类Python

为什么要在Python中关闭文件?

来自分类Java

要在哪些对象上进行同步?为什么局部变量不好?

来自分类Dev

为什么要在init()中检查nil

来自分类Java

为什么要在所有构造函数中显式初始化空白的最终变量?

来自分类Dev

为什么有时不需要在Lambda中捕获const变量?

来自分类Dev

为什么要在Play Framework中的Scala对象上使用@Singleton?

来自分类Dev

Objective-c:为什么Core Foundation变量需要在ARC中显式发布?

来自分类Dev

为什么R将循环变量/索引/虚拟对象存储在内存中?

来自分类Dev

为什么const变量不需要在C中初始化?

来自分类Dev

为什么可以在变量中存储原型的功能?

来自分类Dev

为什么要在条带化充电之前创建客户对象?

来自分类Dev

为什么要在Bash函数中设置环境变量,但不能在脚本本身中设置

来自分类Dev

为什么要在JavaScript中的JSON对象数组中创建额外的数组数组

来自分类Dev

为什么lambda对象中的局部变量是const?

来自分类Dev

为什么要在Forge laravel中重新安装存储库以更改环境中的数据?

来自分类Dev

范围问题:将帐户凭据存储在promise中的新类对象中,但现在需要在其余类中使用此对象

来自分类Dev

为什么要在选择排序算法中存储数组的长度?

来自分类Dev

JVM为什么要在内存中重定位对象?

来自分类Dev

当我们将方法存储在变量中然后调用它时,为什么上下文对象更改为全局窗口对象?

来自分类Dev

为什么我们需要在Android应用中存储Goefence数据?

来自分类Dev

为什么要在小对象上同步?

来自分类Dev

当您可以直接将变量作为指针指向时,为什么要在C中创建指针?

来自分类Dev

为什么在将Javascript对象推送到数组之前必须将其存储在变量中?

来自分类Dev

为什么要在Sharepoint 2013中使用客户端对象模型

来自分类Dev

为什么要在C中重新加载静态局部变量?

Related 相关文章

  1. 1

    为什么我需要在TensorFlow中初始化变量?

  2. 2

    为什么Final变量不需要在Java的main方法中初始化?

  3. 3

    级联的Promise中缺少对象变量

  4. 4

    为什么函数的自变量不是JavaScript中的数组对象?

  5. 5

    为什么要在JavaScript变量的名称中使用$(美元符号)?

  6. 6

    为什么要在Python中关闭文件?

  7. 7

    要在哪些对象上进行同步?为什么局部变量不好?

  8. 8

    为什么要在init()中检查nil

  9. 9

    为什么要在所有构造函数中显式初始化空白的最终变量?

  10. 10

    为什么有时不需要在Lambda中捕获const变量?

  11. 11

    为什么要在Play Framework中的Scala对象上使用@Singleton?

  12. 12

    Objective-c:为什么Core Foundation变量需要在ARC中显式发布?

  13. 13

    为什么R将循环变量/索引/虚拟对象存储在内存中?

  14. 14

    为什么const变量不需要在C中初始化?

  15. 15

    为什么可以在变量中存储原型的功能?

  16. 16

    为什么要在条带化充电之前创建客户对象?

  17. 17

    为什么要在Bash函数中设置环境变量,但不能在脚本本身中设置

  18. 18

    为什么要在JavaScript中的JSON对象数组中创建额外的数组数组

  19. 19

    为什么lambda对象中的局部变量是const?

  20. 20

    为什么要在Forge laravel中重新安装存储库以更改环境中的数据?

  21. 21

    范围问题:将帐户凭据存储在promise中的新类对象中,但现在需要在其余类中使用此对象

  22. 22

    为什么要在选择排序算法中存储数组的长度?

  23. 23

    JVM为什么要在内存中重定位对象?

  24. 24

    当我们将方法存储在变量中然后调用它时,为什么上下文对象更改为全局窗口对象?

  25. 25

    为什么我们需要在Android应用中存储Goefence数据?

  26. 26

    为什么要在小对象上同步?

  27. 27

    当您可以直接将变量作为指针指向时,为什么要在C中创建指针?

  28. 28

    为什么在将Javascript对象推送到数组之前必须将其存储在变量中?

  29. 29

    为什么要在Sharepoint 2013中使用客户端对象模型

  30. 30

    为什么要在C中重新加载静态局部变量?

热门标签

归档