javascript - 为什么yield不能解析promise?

标签 javascript ecmascript-6 yield

我有以下代码:

object = {
    getPastEvents: () => Promise.resolve([1,2,3])
}

function* fetchPastEvents() {
    const values = yield object.getPastEvents()
    console.log(values)
}

const events = fetchPastEvents()
events.next()
events.next()

现在我想知道如何创建一个返回定义的的函数getPastEvents。目前,values未定义。我认为yield可以解决像async wait这样的promise。

最佳答案

当您调用.next时,您将继续运行生成器函数。如果您想使用特定值恢复它,请将一个值传递到 .next 中。因此,如果您想复制 redux-saga 解决 Promise 然后恢复生成器的行为,您需要获取第一次调用 .next 产生的 Promise,等待 Promise 通过使用来解决它的 .then 方法,然后使用它解析的值调用 .next

const object = {
  getPastEvents: () => Promise.resolve([1,2,3])
}

function* fetchPastEvents() {
  console.log("entry")
  const values = yield object.getPastEvents()
  console.log(values)
}

const iterator = fetchPastEvents()
const promise = iterator.next().value;
promise.then(val => iterator.next(val))

不过,我建议您不要自己这样做。如果这是一个如您所说的传奇,那么通过 redux saga 运行它,您将免费获得此行为。或者正如其他人提到的,co库实现了类似的功能。

关于javascript - 为什么yield不能解析promise?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52915545/

相关文章:

javascript - NPM MSSQL - 错误 : uncaughtException: Cannot read property 'release' of null

javascript - 当函数参数为对象时,为 Javascript 编写智能感知代码

javascript - setState Concat 仅存储/返回第一个值——React Native

ruby-on-rails - Rails yield 和 content_for 部分

scala - 在 Scala 中生成惰性 "spiral"

javascript - 单击按钮时会清除文本字段中的内容

Javascript 调用与返回函数

javascript - 类声明 ECMAScript 6 后分号出现 ESLint 错误

Python:产量和产量分配

javascript - 如何定义一个构造函数来生成具有 getter 和 setter 的对象?