为什么屈服不解决承诺?

Tim*_*ütz 0 javascript yield ecmascript-6

我有以下代码:

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

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

const events = fetchPastEvents()
events.next()
events.next()
Run Code Online (Sandbox Code Playgroud)

现在我想知道如何创建一个getPastEvents返回已定义的函数values.现在,valuesundefined.我认为收益率可以解决像异步等待的承诺.

Nic*_*wer 5

当你打电话时.next,你恢复运行发电机功能.如果要使用特定值恢复它,请将值传递给.next.因此,如果你想复制redux-saga解析promises然后恢复生成器的行为,你需要接受第一次调用所产生的承诺.next,等待使用其.then方法解析的promise ,然后.next使用value 调用它解决了.

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))
Run Code Online (Sandbox Code Playgroud)

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