使用带有promise而不是thunks的co-library有什么好处
What are the benefits of using the co library with promises instead of with thunks?
所以我一直在阅读关于co库的使用,我在大多数博客文章中看到的一般设计模式是将具有回调的函数封装在thunk中。然后使用es6生成器将这些thunk生成到co
对象。像这样:
co(function *(){
var a = yield read(‘Readme.md’);
var b = yield read(‘package.json’);
console.log(a);
console.log(b);
});
function read(path) {
return function(done){
fs.readFile(path, ‘utf8', done);
}
}
我能理解这一点,因为它带来了承诺的所有好处,比如更好的可读性和更好的错误处理。
但是,如果您已经有可用的承诺,那么使用co
有什么意义呢?
co(function* () {
var res = yield [
Promise.resolve(1),
Promise.resolve(2),
Promise.resolve(3),
];
console.log(res); // => [1, 2, 3]
}).catch(onerror);
为什么不像一样
Promise.all([
Promise.resolve(1),
Promise.resolve(2),
Promise.resolve(3),
]).then((res) => console.log(res)); // => [1, 2, 3]
}).catch(onerror);
对我来说,与Promise版本相比,co使代码看起来更加混乱。
没有真实的案例,没有。除非你真的讨厌promise构造函数(在这种情况下,bluebird promisify
来拯救你)。
当您本机拥有Promises时,几乎所有使用单个值调用一次的回调的有效用例都是无效的。
相关文章:
- 这是什么 ==- javascript 运算符
- 我的单元测试选项是什么
- 全局变量和全局对象的属性之间有什么区别吗
- 打破承诺链的好方法是什么
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- Javascript中的空白是什么
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- 在ember/handlers中使用value和valueBinding有什么区别
- 什么'在webpack外部设置中,reactDom和reactDom不同
- 在JavaScript中拆分日期字符串的更好方法是什么
- 为什么$.brower被弃用?还有什么更好的替代方案
- 什么是&&在没有if的行中的变量之间
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- 处理浮点错误的最佳方法是什么
- DOM元素和angular元素之间的主要区别是什么
- javascript导入的最佳实践是什么
- 这两个关于 JavaScript 作用域链的例子有什么区别?
- 什么是“;无效切片大小”;轨道错误?-@categories.ech_slice(column_length)do|co
- 使用带有promise而不是thunks的co-library有什么好处
- JavaScript生态系统中的.co文件是什么