async/await -- 这是它在做什么?
async/await -- is this what it's doing?
这两段代码本质上是不是在做同样的事情,可以用同样的方式使用?
// 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);
}
这两个函数的区别是第一个returns undefined
和第二个returns 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 年初)原生 promises 的运行速度比 bluebird
慢,因此第一种方法可能会更快。根据编译目标:ES5 或 ES6,来自 ES7 的编译器可能会产生混乱或使用原生 Promises
或 Generators
的代码。在大多数情况下,这不是问题,但我现在不能推荐 ES7 slyle 用于路由等高负载任务。
这两段代码本质上是不是在做同样的事情,可以用同样的方式使用?
// 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);
}
这两个函数的区别是第一个returns undefined
和第二个returns 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 年初)原生 promises 的运行速度比 bluebird
慢,因此第一种方法可能会更快。根据编译目标:ES5 或 ES6,来自 ES7 的编译器可能会产生混乱或使用原生 Promises
或 Generators
的代码。在大多数情况下,这不是问题,但我现在不能推荐 ES7 slyle 用于路由等高负载任务。