我有以下代码:
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/