这两位代码本质上是否在做相同的事情并且可以以相同的方式使用?

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

最佳答案

这两个函数之间的区别在于,第一个返回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用于诸如路由之类的高负载任务。

10-06 00:15