【问题标题】:If I yield to a Promise does it wait for the Promise to be resolved before continuing [duplicate]如果我屈服于承诺,它会等待承诺得到解决,然后再继续[重复]
【发布时间】:2016-03-19 09:58:33
【问题描述】:

我正在努力理解如何使用生成器函数和迭代器来实现我正在考虑编写的库的各种设计选项。

已经了解了简单的生成器功能,我现在正在努力研究互联网上的示例,这些示例展示了如何将生成器与 Promises 集成。

一个问题是所有文章都是在关于 Promises 的 ES2015 规范可用之前编写的,它们都使用了 3 个我不知道细微差别的第三方库。

所以我不太明白的问题是,如果你 yield 并且生成器函数调用 .next(Promise 返回函数) 是否会在调用 .next 函数或返回的 promise 时继续超出 yield 的语句解决。这些例子似乎暗示它要等到 Promise 解决,但我不明白为什么。

【问题讨论】:

  • 你读过哪些文章你认为已经过时了? (相关特性)生成器和 Promise 早在规范批准之前就已经勾勒出来了。
  • @Bergi 我不认为这些文章已经过时了,它们只是引用了我不确定是否与规范完全相同的外部承诺库。
  • @torazaburo - 我的问题是完全重复的。我在那里投票赞成答案
  • 使用生成器作为aync/await 的解决方法仅依赖于Promise.resolvePromise.prototype.then,这两者在every proper promise libary 中都已完全标准化

标签: javascript promise generator ecmascript-6


【解决方案1】:

生成器函数调用 .next(Promise 返回函数)

不,它没有。发电机需要由某物驱动,它不能自行运行。

一旦调用 .next 函数,超出 yield 的语句是否继续运行

是的。这与你所产生的价值观无关,无论他们是否承诺。

要获得预期的行为,.next() 仅在产生的承诺履行时被调用(或者.throw 在它拒绝时被调用),您需要像这样运行生成器。与提议的async/await 语法相比,生成器自己不会这样做。这就是所有这些 3rd 方库的用武之地:您不想自己编写这些东西(您也不想到处重复自己,也不可能在第一次尝试时就做对了)。

【讨论】:

    猜你喜欢
    • 2018-10-02
    • 1970-01-01
    • 2021-05-21
    • 2021-02-02
    • 2017-09-19
    • 2020-10-17
    • 2018-12-14
    • 2019-04-29
    • 2018-03-19
    相关资源
    最近更新 更多