这两段代码基本上是做同样的事情,可以用同样的方式吗?
// dbGrab returns a promise.
// OPTION A
var consoleFoo = function(refToFoo){
dbGrab(refToFoo)
.then(function(foo){
console.log(foo);
})
}
// OPTION B
var consoleFooES7 = async function(refToFoo){
var foo = await dbGrab(refToFoo);
console.log(foo);
}
答案 0 :(得分:1)
这两个函数之间的区别在于,第一个返回undefined
,第二个返回Promise
。我稍微修改了它们,使它们几乎相等。
var consoleFoo = function(refToFoo){
return dbGrab(refToFoo)
.then(function(foo){
console.log(foo);
})
}
// OPTION B
var consoleFooES7 = async function(refToFoo){
var foo = await dbGrab(refToFoo);
console.log(foo);
}
此外,您可以考虑到目前(2016年初)本机承诺的工作速度比bluebird
慢,因此第一种方法可能会更快。根据编译目标:ES5或ES6,ES7中的编译器可能会产生使用本机Promises
或Generators
的混乱或代码。在大多数情况下,这不是问题,但我现在不能推荐ES7 slyle用于高负载任务,例如路由。