【问题标题】:async/await -- is this what it's doing?async/await - 这是它在做什么?
【发布时间】:2016-06-02 15:19:50
【问题描述】:

这两段代码本质上是不是在做同样的事情并且可以以同样的方式使用?

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

【问题讨论】:

  • 是的,它们是相同的。
  • @zerkms 不,他们不是,因为异步函数返回一个承诺。
  • @torazaburo 没有使用返回结果,所以没关系。
  • 嗯?你怎么知道这是怎么称呼的?
  • @torazaburo 只是问 OP。

标签: javascript async-await ecmascript-next


【解决方案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 年初)原生 Promise 的运行速度比 bluebird 慢,因此第一种方法可能更快。根据编译目标:ES5 或 ES6,来自 ES7 的编译器可能会产生混乱或使用本机 Promises 或 Generators 的代码。在大多数情况下,这不是问题,但我暂时不推荐 ES7 slyle 用于路由等高负载任务。

【讨论】:

    猜你喜欢
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    相关资源
    最近更新 更多