async / await - 它正在做什么?

时间:2016-02-21 05:20:57

标签: javascript async-await ecmascript-next

这两段代码基本上是做同样的事情,可以用同样的方式吗?

// 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);
}

1 个答案:

答案 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中的编译器可能会产生使用本机PromisesGenerators的混乱或代码。在大多数情况下,这不是问题,但我现在不能推荐ES7 slyle用于高负载任务,例如路由。