If the ordering is important, then you should be using
a()
.then(()=>b())
.then(()=>c())
Assuming anything about the completion order of:
a():
b();
c();
Where a, b and c are async tasks of any kind (be they classic old callbacks, Promises, Observables, whatever) is just asking for trouble. The whole point is that you don't care about when it finishes, you just want to know that it has finished. If the order is that important and you don't want to handle managing it, you should just write standard synchronous code.
In what way is this incorrect? Those are three separate promises; no code can be correct that depends on whether one resolve() call finishes before an independently started resolve() call, right?
This might lead to subtle ordering bugs, I would recommend against using both together.
Using bluebird and native promises together may result in slower performance because V8 has fast paths for native promises which fail for bluebird.