Re: [問題] 把非同步模擬成同步的問題
各位好,上一篇文章中
很多版友都建議我使用 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://www.ptt.cc/bbs/Web_Design/M.1529558266.A.2B5.html
※ 編輯: awpadam (61.216.7.85), 06/21/2018 13:23:19
→
06/21 16:37,
7年前
, 1F
06/21 16:37, 1F
我看 await 只能寫在 有宣告成 async 的函數裡面
那我是不是我應該將外部整個包成一個 async function 呢?
如果是這樣的話,終究還是逃不了 要處理 //執行service的後續步驟 這邊的code
※ 編輯: awpadam (61.216.7.85), 06/21/2018 17:32:20
推
06/21 17:40,
7年前
, 2F
06/21 17:40, 2F
剛剛也是想這樣,後續的程式碼超級多
我對async不熟,不知道這樣包會不會怎樣
而且我還要用babel轉成相容性的代碼,感覺不知道會出什麼事
我先來研究async到底在做什麼事
謝謝你們喔
※ 編輯: awpadam (223.136.246.132), 06/21/2018 17:49:44
推
06/23 03:18,
7年前
, 3F
06/23 03:18, 3F
看起來你的結論也是:沒辦法
不過像上面寫的,把整塊用匿名函式包起來,前面加上async
然後裡面的非同步函式用 await
也的確可以運作
只是寫完之後要用babel轉成瀏覽器可支援的code
※ 編輯: awpadam (123.193.141.167), 06/23/2018 10:32:26
推
06/23 16:43,
7年前
, 4F
06/23 16:43, 4F
→
06/23 16:43,
7年前
, 5F
06/23 16:43, 5F
這個我瞭解,請問這樣做會有什麼副作用嗎?
※ 編輯: awpadam (123.193.141.167), 06/23/2018 16:54:33
→
06/24 13:38,
7年前
, 6F
06/24 13:38, 6F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
9
16
Web_Design 近期熱門文章
PTT數位生活區 即時熱門文章