发电机和设定值/完成产量

generator and setting value/done on the yield

本文关键字:发电机      更新时间:2023-09-26

如果我创建了一个自定义生成器,我可以根据自己的意愿设置值/done,但我认为使用es6生成器会出错,因为我似乎无法按照自己的意愿设定值/done。当我设置某个东西时,它都进入"值",但生成器返回"done:false"——我试图强制一个"done:true"

var A = [
    {id: 1, page: 'page one'},
    {id: 2, page: 'page two'},
    {id: 3, page: 'page three'},
    {id: 4, page: 'page four'},
  ]
function* gen(iteree) {
    let input = yield null
    while(true) 
      input = yield iteree(input) ? iteree(input) : { done: true}
}
// this will be built out more, just showing a 
// passing of a function here
let inter = (a) => { 
       return A[a]
}
let c = gen(inter)
    console.log(c.next())
    console.log(c.next(4)) // <-- **I want this to yield {value: null, done: true}**

,但它会产生:{value:{done:true},done:false}

"强制done"将由return完成。在发电机中时

yield 4;
// {value: 4, done: false}
return 4;
// {value: 4, done: true}

以下是我在代码中创建您想要的答案的方法。

    var A = [
    {id: 1, page: 'page one'},
    {id: 2, page: 'page two'},
    {id: 3, page: 'page three'},
    {id: 4, page: 'page four'},
  ]
function* gen(iteree) {
    let input = yield null
    while(input <= A.length) {
      if(iteree(input)){
        yield iteree(input) 
      }else{
        return null;
      }
   }
}
// this will be built out more, just showing a 
// passing of a function here
let inter = (a) => { 
       return A[a]
}
let c = gen(inter)
console.log(c.next())
console.log(c.next(4))