[英]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.