作者awpadam (adam!)
看板Web_Design
标题Re: [问题] 把非同步模拟成同步的问题
时间Thu Jun 21 13:17:43 2018
各位好,上一篇文章中
很多版友都建议我使用 await 的方法
不过我研究了一下之後发现,await好像和promise一样
都是在处理 非同步与非同步间的流程控制
好像没办法达到 : 在同步与非同步交互流程中
把非同步的函式模拟成同步的
例如下面的例子
function resolveAfter2Seconds(x) {
return new Promise(resolve => {
setTimeout(() => {
resolve(x);
}, 2000);
});
}
async function getService() {
return await resolveAfter2Seconds(10);
}
var value = getService();
console.log(value);
console.log(222);
//处理 getService() 後的後续流程
执行结果:
Promise {<pending>}
222
(在不把 console.log(222) 包成 callback 的情况下)
请问是否有任何办法让这只程式 变成
执行结果:
10
222
我总觉得这个问题好像很难
先祝各位大大有愉快的一天~
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.216.7.85
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Web_Design/M.1529558266.A.2B5.html
※ 编辑: awpadam (61.216.7.85), 06/21/2018 13:23:19
1F:→ Kenqr: var value = await getService();06/21 16:37
我看 await 只能写在 有宣告成 async 的函数里面
那我是不是我应该将外部整个包成一个 async function 呢?
如果是这样的话,终究还是逃不了 要处理 //执行service的後续步骤 这边的code
※ 编辑: awpadam (61.216.7.85), 06/21/2018 17:32:20
2F:推 oToToT: 把全部东西包到一个async lambda里直接跑?06/21 17:40
刚刚也是想这样,後续的程式码超级多
我对async不熟,不知道这样包会不会怎样
而且我还要用babel转成相容性的代码,感觉不知道会出什麽事
我先来研究async到底在做什麽事
谢谢你们喔
※ 编辑: awpadam (223.136.246.132), 06/21/2018 17:49:44
看起来你的结论也是:没办法
不过像上面写的,把整块用匿名函式包起来,前面加上async
然後里面的非同步函式用 await
也的确可以运作
只是写完之後要用babel转成浏览器可支援的code
※ 编辑: awpadam (123.193.141.167), 06/23/2018 10:32:26
4F:推 eight0: 别忘了你用 async 的匿名函式包起来,得到的结果还是一个 06/23 16:43
5F:→ eight0: 匿名的非同步函式 06/23 16:43
这个我了解,请问这样做会有什麽副作用吗?
※ 编辑: awpadam (123.193.141.167), 06/23/2018 16:54:33
6F:→ Gold740716: edge firefox chrome 都可以直接用 async 了吧 06/24 13:38