- 主题:现在你们写 js 还会在发布的时候转成 es5 吗?
我又想了一下,其实你说得对了一半。。里面的 waiter 就是以前 jquery 的 Promise,或者说 Deferred. 相当于现在 Promise 缺失的另一半。
这些代码没啥新奇的,只是适配协程而已。不要在意这些细节。一个协程差不多要一千多行代码,这个 Event 只是里面一个小小的工具类。我贴这段代码是对上面说的 generator/coroutine 代码互转的补充。
【 在 pangwa (学门手艺,混口饭吃.) 的大作中提到: 】
: 感觉就是轮了一个promise啊....
: 这里用到一个特殊的类型 Event,它的代码是这样:
: class Event {
: ...................
--
修改:hgoldfish FROM 110.85.22.*
FROM 110.85.22.*
你还是上一个 eslint 吧
async () {
return await promise
}
这脱裤子放屁也是没谁了
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 这里用到一个特殊的类型 Event,它的代码是这样:
: class Event {
: constructor() {
: ...................
--
FROM 115.188.159.*
呵呵。。你还是先看懂代码再说吧。。上面有个 return this.value; 你漏看了。
【 在 eGust (十年) 的大作中提到: 】
: 你还是上一个 eslint 吧
: async () {
: return await promise
: ...................
--
FROM 110.85.22.*
他的意思是
return await xxx 和return xxx 是一个效果
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 呵呵。。你还是先看懂代码再说吧。。上面有个 return this.value; 你漏看了。
--
FROM 101.85.232.*
不一样啊。。
return await promise;
会阻塞在这个语句,等待 promise 被处理,然后返回 resolve() 传入的值。而
return promise;
返回的是一个 promise 类型。没有阻塞。
【 在 pangwa (学门手艺,混口饭吃.) 的大作中提到: 】
: 他的意思是
: return await xxx 和return xxx 是一个效果
--
FROM 110.85.22.*
去看spec....
【 在 hgoldfish (老鱼) 的大作中提到: 】
不一样啊。。
return await promise;
会阻塞在这个语句,等待 promise 被处理,然后返回 resolve() 传入的值。而
return promise;
返回的是一个 promise 类型。没有阻塞。
【 在 pangwa (学门手艺,混口饭吃.) 的大作中提到: 】
: 他的意思是
: return await xxx 和return xxx 是一个效果
--
FROM 101.85.232.*
好吧。。好像还真是。
如果打算返回一个 promise,岂不是又踩坑?
let promise = await async () => { return new Promise(...); }
js 这种设计哲学我觉得很糟糕。多了一个记忆规则的负担。
【 在 pangwa (学门手艺,混口饭吃.) 的大作中提到: 】
: 去看spec....
: 不一样啊。。
: return await promise;
: ...................
--
修改:hgoldfish FROM 110.85.22.*
FROM 110.85.22.*
你这么写也不管用的, 返回promise会unwrap到最终的值... 参考promise的语义.
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 好吧。。好像还真是。
: 如果打算返回一个 promise,岂不是又踩坑?
: let promise = await async () => { return new Promise(...); }
: ...................
--
修改:pangwa FROM 101.85.232.*
FROM 101.85.232.*
虽然 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.*
我一直都没弄明白的问题就是上了await准备怎么处理异常
还是彻底不管了
【 在 hgoldfish 的大作中提到: 】
: await 多好用啊。。为啥现在才用。
: 我现在发现缺少 async/await 的话我都不会写界面程序了。
:
--
FROM 119.103.212.*