【问题标题】:Can we return a method in generator?我们可以在生成器中返回一个方法吗?
【发布时间】:2021-04-09 08:17:15
【问题描述】:

我创建了一个生成器,它产生 setTimeout 并返回一个值...

const wait_and_say = (a) => {
  console.log(`Wait for 4 second to get a value from Generator`);
  return setTimeout(() => {
    return a;
  }, 4000);
};

const getAnumber = function*() {
  yield wait_and_say(3.145);
  yield wait_and_say("Adams");
  yield wait_and_say("Get Cone");
  yield wait_and_say(5.12455);
};

const newNumber = getAnumber();
console.log(newNumber.next().value);
console.log(newNumber.next().value);
console.log(newNumber.next().value);
console.log(newNumber.next().value);

但输出与上述代码不符。 输出未定义,未定义,未定义, 但是欲望输出是等待或4秒才能得到一个数字。

请帮忙!!!!修复

【问题讨论】:

  • "产生 setTimeout 并返回一个值" - 不,这不是它的作用,它不是这样工作的。你为什么要在这里使用生成器?你应该使用 promises 和 async/await等待超时。
  • 我不确定您为什么声称输出未定义。它记录了每个 setTimeout() 的返回值,它是一个数字(或 Node.js 的 Timeout 对象 setTimeout()

标签: javascript node.js webpack ecmascript-6


【解决方案1】:

Javascript 是一种事件驱动的编程语言,它不像任何其他可以等待返回值的编程语言那样工作。 了解 Promises 和 Async/await 以了解更多信息。

const wait_and_say = (a) => {
     return new Promise((resolve,reject)=>{
       console.log(`Wait for 4 second to get a value from      Generator`);
      setTimeout(() => {
         resolve(a)
      },4000);
   })
};

const getAnumber =  function* () {
     yield  wait_and_say(3.145);
     yield wait_and_say("Adams");
     yield wait_and_say("Get Cone");
     yield wait_and_say(5.12455);
};

(async function(){
    const newNumber = getAnumber();
    console.log(await newNumber.next().value);
    console.log(await newNumber.next().value);
    console.log(await newNumber.next().value);
    console.log(await newNumber.next().value);
})()

【讨论】:

猜你喜欢
  • 2019-11-05
  • 1970-01-01
  • 1970-01-01
  • 2020-09-17
  • 2011-09-27
  • 1970-01-01
  • 2017-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多