繁体   English   中英

JavaScript,返回 promise 内箭头 function

[英]JavaScript, return promise inside arrow function

我刚刚看到了这段代码:

const buildSW = () => {
  // This will return a Promise <- that comment was present on the code
  workboxBuild
    .injectManifest({
      swSrc: 'src/sw.js'
      // some code
    })
    .then(({ count, size, warnings }) => {
      // some code
    })
    .catch(console.error);
};
buildSW();

该代码似乎正在运行,已经投入生产大约 1 年,但我对This will return a Promise的评论感到困惑,因为我没有看到实际上有一个return语句,整个代码在 { } .

不应该吗?:

return workboxBuild
    .injectManifest({ ...etc

该代码是本指南的一部分:

https://developers.google.com/web/tools/workbox/guides/generate-service-worker/workbox-build

那里存在return promise 。 那么如何或为什么在上面显示的代码中没有返回?

该注释是对其后行的注释,并且是多余的。 例如

// a() will return a Promise
a().then(() => () // duh

...因为它相当于:

const promise = a();
promise.then(() => ()

不应该吗?: return workboxBuild.injectManifest({...etc

这取决于您希望buildSW拥有的合同。

如所写, buildSW返回任何内容并处理自己的错误,使用.catch(console.error)将它们发送到控制台。 适用于事件处理程序 - 例如button.onclick = buildSW

但是如果你希望从其他地方调用buildSW ,一个更好的合约是返回一个 promise,并将错误处理留给调用者:

const buildSW = () => {
  return workboxBuild.injectManifest({swSrc: 'src/sw.js'})
    .then(({ count, size, warnings }) => {
      // some code that may also fail
    });
};
buildSW().catch(console.error);

我对评论感到困惑,因为我没有看到实际上有一个return声明,就像它出现在指南中一样。 不应该有一个吗?

是的,应该有return声明。 当然,function 已经捕获并记录错误,但始终从异步函数返回 promise 仍然是个好主意。

那么如何或为什么在上面显示的代码中没有返回?

它的工作只是因为buildSW(); call you're doing 不会尝试使用应该返回的 promise。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM