首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有承诺的函数发生器

有承诺的函数发生器
EN

Stack Overflow用户
提问于 2020-10-01 08:35:54
回答 2查看 180关注 0票数 2

我必须编写异步函数,以便:

代码语言:javascript
运行
复制
const myAsyncFunction = async(function* (promise) {
  const data = yield promise;
  console.log(data);
});

myAsyncFunction(Promise.resolve("Hello world")); // console: ‘Hello world!’`

结果应该是-控制台:‘Hello!’

我认为这将是一个正确的实施:

代码语言:javascript
运行
复制
function async(cb) {
  return cb().next();
}

const myAsyncFunction = async(function* (promise) {
  const data = yield promise;
  console.log(data);
});

myAsyncFunction(Promise.resolve("Hello world")); // console: ‘Hello world!’`

但是我有一个类型错误: TypeError: myAsyncFunction不是一个函数

我找到了一些例子生成器转发它所做出的任何承诺的结果。

但我不明白它是如何工作的,我的错误在哪里:

代码语言:javascript
运行
复制
function async(cb) {
 return function () {
  let generator = cb.apply(this, arguments);

  function handle(result) {
   if (result.done) return Promise.resolve(result.value);

   return Promise.resolve(result.value).then(
    function (res) {
      return handle(generator.next(res));
    },
    function (err) {
      return handle(generator.throw(err));
    }
   );
  }
 };
}

请解释一下我做错了什么?

EN

Stack Overflow用户

发布于 2020-10-02 06:19:45

解决办法是

代码语言:javascript
运行
复制
function async(cb) {
  return async function () {
    const generator = cb.apply(this, arguments);
    const nextResult = generator.next();
    const value = await nextResult.value;
    generator.next(value);
  };
}

const myAsyncFunction = async(function* (promise) {
  const data = yield promise;
  console.log(data);
});

myAsyncFunction(Promise.resolve("Hello World"));
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64151741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档