javascript - 带有 Promise 的函数生成器
问题描述
解决方案
我假设您的代码(mwe)如下所示:
const myAsyncFunction = async(function* (promise) {
const data = yield promise;
console.log(data);
});
myAsyncFunction(Promise.resolve("Hello world")); // console: ‘Hello world!’`
function async(cb) {
return cb().next();
}
当你运行它时,你确实得到了错误TypeError: myAsyncFunction is not a function
。但是,当您调整以使用文章中的复制功能时:
const myAsyncFunction = async(function* (promise) {
const data = yield promise;
console.log(data);
});
myAsyncFunction(Promise.resolve("Hello world")); // console: ‘Hello world!’`
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));
}
);
}
};
}
你没有得到错误。这是因为文章中的代码在异步定义中返回了一个函数,因此您可以使用该行中给出的 args 来应用它
myAsyncFunction(Promise.resolve("Hello world")); // console: ‘Hello world!’`
在您的原始定义中,该async
定义不返回函数,因此上述调用失败。
从您的下一篇文章开始,并尝试了解您想要什么,以下将使用生成器函数中的控制台行打印字符串,但仍然不太确定您要实现的目标是什么:
function async(gen) {
return function (cb) {
g = gen.apply(this, [cb])
g.next()
cb.then(res => {
g.next(res);
});
}
}
推荐阅读
- kubernetes - 如何处理 kubernetes 中 kafka 和 zookeeper 的故障场景
- java - 如何使用 Google Play 服务创建排名?
- html - 我如何从代码中调用指令 ngxPrint(角度 7)
- javascript - 为什么 YouTube 播放器 API 循环不起作用?
- jquery - 将javascript值传递给html输入标签
- python - instance.setMetadata() - 没有任何变化
- active-directory - Microsoft Active Directory、OpenLDAP 和 Apache DS 的日期格式不同
- angular - 如何订阅和测试 Observable.of rxjs Angular 9
- python - Python scipy curve_fit 指数方程不符合预期
- java - 如何从 Akka Streams Sink 中抛出的异常中恢复?