虽然 promise 跟 await promise 没差别,但 () => promise 跟 async () => promise 却有差别
(() => {
const foo = async () => new Promise((resolve) => resolve('foo'));
const bar = () => new Promise((resolve) => resolve('bar'));
foo().then(console.log);
bar().then(console.log);
})();
执行结果是
bar
foo
因为写了一个多余的 async,你的代码变慢了。没必要 await 的时候 eslint 可以提示不要写,印象中这条规则不会 autofix;没有了 await,就更不要乱写 async,在实际中会创建多余的 micro-task。
还是老话,js 是设计跑在浏览器里的语言,本身就基于 event loop。为了保证在不同执行环境里的一致性,es6+ 的每个设计都不是拍脑袋的决定。从 Promise 到 async/await,各家引擎都花了大量的精力和时间,才正确实现了标准。你只考虑自己的使用习惯,从有限的使用和经验中就得出种种结论,根本就不会去考虑作为语言本身有哪些问题。你一直都到处说 async/await 传递性,就是你不求甚解想象出了一条不存在的规则。如果不需要使用结果的话,反正我是从来不做多余的 await,直接把 promise 放在结果里返回,一直到需要处理函数才 async/await。
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 好吧。。好像还真是。
: 如果打算返回一个 promise,岂不是又踩坑?
: let promise = await async () => { return new Promise(...); }
: ...................
--
FROM 115.188.159.*