31 条回复  ·  3315 次点击
june4 小成 前天 13:14
你不看 resolve,reject 这二个参数吗,这是可以异步调用的,比如在用户事件回调/网络回调中,这就是异步啊。且你在 await 这个 promise 时会等到这二个参数被调用后才会往下执行,这又解决了回调地狱。
duanxianze 小成 前天 13:18
Promise 本质就是语法糖
bsg1992 小成 前天 13:20
异步 和并行不是一回事的 Promise 解决的函数回调回调地狱的问题 且 JS 本身单线程 靠的是 event loop 。 而你说的这个 是多线程, 在目前浏览器中 只有 worker 和网络请求是单独的线程执行的
panyang 初学 前天 13:52
所实话,你的理解没有什么大问题。new Promise 中的代码确实是同步执行的,但是传入的 resolve 或 reject 函数会异步触发。 对于你的困惑,应该是你忘了 resolve 或 reject 函数会异步触发。
Linho1219 初学 前天 14:06
@duanxianze Promise 哪里是语法糖???
luohechen 初学 前天 14:17
@duanxianze async await 才是语法糖
PTLin 小成 前天 14:30
你要明白 js runtime 的单线程 事件循环模型才能真正的了解 promise 和 js 的 async 。 搜索关键词:javascript 事件循环
leonshaw 小成 前天 14:32
你最终要调用原生的异步方法才是异步
ns09005264 小成 前天 14:49
我想 javascript 的异步大概是这样发展的: 1. 最开始是 xmlhttprequest ,然后通过回调函数处理异步结果。 2. 之后添加了 Promise ,通过链式调用来解决回调地狱,本质就是一个“工具类”,用户也可以手写 Promise ,在语法上没什么特别的。 3. 添加了 await 和 async 关键字,专门在语法层面改善了 Promise 的链式调用地狱。 现在的情况是,用来解决回调地狱的 Promise ,被 await 和 async 进一步取代了。 还能用到 Promise 的地方,这里有一个例子,有许多图片 node 共用一张精灵图,而图片 node 是根据用户滚动视图懒加载的,会先于精灵图的加载展示在页面文档里,因此利用了 Promise 给图片 node 一个保证,等你要展示图片的时候,再叫我。 https://github.com/MapoMagpie/eh-view-enhance/blob/d77e0655cff35818141b5e6e5246221b1fb12d74/src/platform/ehentai.ts#L211 在 211 行给 node.delaySrc 设置了 Promise 属性,但是在构造的时候将 Promise 里的 resolve 和 reject 拿走了,接着在 215 行的异步操作的回调函数里去执行 resolve 或 reject 。 最后在某个将来时刻再使用 node.delaySrc https://github.com/MapoMagpie/eh-view-enhance/blob/d77e0655cff35818141b5e6e5246221b1fb12d74/src/img-node.ts#L146
iOCZS 小成 前天 15:15
promise 是微任务队列,async&await 是协程
返回顶部