【问题标题】:Is there an implicit return value to async functions异步函数是否有隐式返回值
【发布时间】:2019-06-19 21:22:41
【问题描述】:

这两个sn-ps是一样的吗?

顶部版本在箭头函数中返回一个承诺,底部版本不返回任何内容。使用 async 时是否有隐式返回,是否应该返回 null,是否需要返回 const 信息?

当我查看 babel 如何翻译它们时,它将 async/await 替换为生成器,使其看起来像我应该返回 const 信息

// t.get() is a promise, set and delete are not

db.runTransaction(t => {
  return t.get(infoRef).then(info => {
    t.set(db.doc(`/users/${uid}`), info.data());
    t.delete(infoRef);
  });
});

db.runTransaction(async t => {
  const info = await info.get(infoRef)
  t.set(db.doc(`/users/${uid}`), info.data());
  t.delete(infoRef);
});

babel link

【问题讨论】:

  • 我认为const info = await info.get(infoRef) 应该是const info = await t.get(infoRef)
  • 是的,看这个:MDN: async function

标签: javascript firebase async-await google-cloud-functions


【解决方案1】:

Async functions implicitly return a promise.

如果promise 是chained,则从一个promise 返回一个值将该值作为参数传递给下一个promise。

如果你在第一个 Promise 之后实际上没有链接任何东西,那么返回值将被忽略,并且没有必要包含它。

【讨论】:

    【解决方案2】:

    没有隐式返回,但任何返回值都包装在一个承诺中。

    【讨论】:

      猜你喜欢
      • 2013-10-26
      • 1970-01-01
      • 2022-01-14
      • 2019-04-06
      • 2018-12-22
      相关资源
      最近更新 更多