javascript - 如何将 co.wrap 与生成器一起使用
问题描述
const co = require('co');
const func1 = function(){
setTimeout(()=>{
console.log('func1');
},2000);
}
const func2 = function(){
setTimeout(()=>{
console.log('func2');
},2000);
}
const func3 = function(){
console.log('func3');
}
const gen = co.wrap(function*(){
yield func1;
yield func2;
return yield func3;
});
gen()
.then(function(){console.log('end')});
预期结果是 func1 func2 func3 end
但它没有显示我的意图。
它显示 func1
如何修复代码以输出预期结果
解决方案
两个问题:
您的函数无法返回控制权。如果您想使用 thunk(文档建议不要这样做),您需要实际获取并调用回调:
const func1 = function(cb){ setTimeout(()=>{ console.log('func1'); return cb(); },2000); };
但是,最好使用 Promise:
const func2 = function(){ return new Promise((resolve) => { setTimeout(()=>{ console.log('func2'); return resolve(); },2000); }); };
如果使用 Promise,则需要在 yield 时调用该函数:
yield func2();
yield
如果它是一个 thunk,你可以只调用一个函数而不调用它。
推荐阅读
- javascript - 如何组合两个 JavaScript 三元运算符?
- c++ - 客户端在关机后向收到的数据包发送 RST(SHUT_WR)
- tensorflow - 如果我预测相同的结果并在之后计算损失,则验证损失是不一致的
- entity-framework - 使用 DevForce EDMX 的预生成视图
- python - 当 pip 安装包时出现 ModuleNotFoundError,但在使用 python setup.py install 时没有
- javascript - 我正在将对象属性的值从 false 更改为 true,但我的 v-show 条件并未反映这一点
- traefik - 我可以禁用指定路径的基本身份验证吗?
- php - 在PHP中的多维数组中合并取决于键值的数组
- powershell - 如何在 while 循环中附加 Web 请求结果
- php - 找到最多十度分离的最短路径