Co.js and bluebird.js — what's the difference?

2019-03-28 12:49发布

问题:

Could someone help me understand the differences between using Koa.js and Bluebird.js with ES6 Harmony. Specifically, how does

co( function * () {
  //stuff
} );

compare to,

Promise.coroutine( function * () {
  //stuff
} );

It just seems Koa should be using Bluebird and not recreating the wheel. What's different?

回答1:

For now the difference is that Koa allows yielding more than just promises.

However a feature is being added that allows not only yielding callbacks, thunks etc but any arbitrary thing that comes to your mind. Bluebird is also the fastest. So after this version koa should be just using bluebird indeed.

See https://github.com/petkaantonov/bluebird/issues/131#issuecomment-36975495



回答2:

There is a pull request on co to use Bluebird. The comments there should make certain things more clear. co relies on the native V8 Promises feature provided in 0.11 while Bluebird aims to work well in 0.10 too. You can use co in versions below 0.11 but then Bluebird would be a better option. In that link, you can see that the benchmarks show that co is not slower than Bluebird, so that argument is incorrect. Plus, it is only 300 lines of code, sticking to KISS is generally a good practice. So it is not recreating the wheel. It is slimming it down. You can read the code and understand what it does in few minutes. It took me an hour to read through the Bluebird API doc. There is also a mention that the V8 implementation is broken, so Bluebird may be used for an interim period.