我有兩個函數a
和b
是異步的,前者沒有await
,後者是await
。他們都將某些內容記錄到控制檯並返回undefined
。在調用函數的任何一個之後,我會記錄另一條消息,並查看消息是在執行函數主體之前還是之後寫入的。不用等待在Javascript中的異步函數
function someMath() {
for (let i = 0; i < 3000000; i++) { Math.sqrt(i**5) }
}
function timeout(n) {
return new Promise(cb => setTimeout(cb, n))
}
// ------------------------------------------------- a (no await)
async function a() {
someMath()
console.log('in a (no await)')
}
// ---------------------------------------------------- b (await)
async function b() {
await timeout(100)
console.log('in b (await)')
}
clear.onclick = console.clear
aButton.onclick = function() {
a()
console.log('after a (no await) call')
}
bButton.onclick = function() {
b()
console.log('after b (await) call')
}
<button id="aButton">test without await</button>
<button id="bButton">test with await</button>
<button id="clear">clear console</button>
如果啓動測試,而不await
功能似乎工作,如果它是同步的。但與await
,該消息是反轉作爲功能異步執行。
所以我的問題是:JavaScript如何執行async
功能當沒有await
關鍵字存在?
實際使用情況:我有的conditionnaly執行的await
關鍵字,我需要知道,如果是同步或不按順序執行的功能,以使我的元素:
async function initializeComponent(stuff) {
if (stuff === undefined)
stuff = await getStuff()
// initialize
if (/* context has been blocked */)
renderComponent() // render again if stuff had to be loaded
}
initializeComponent()
renderComponent()
PS:標題有javascript關鍵字,以避免與其他語言的相同問題混淆(即https://stackoverflow.com/q/12016567/6320039)
您還需要將'bButton.onclick'函數轉換爲異步函數並等待'b()'結束才能獲得所需的日誌。 –
@JoseHermosillaRodrigo我不想等待所需的日誌,我想知道使用或不使用'await'關鍵字改變同步功能。如果沒有,也許爲什麼我的測試是錯誤的。我會在最後更新我的真實使用案例,也許它會更清晰。 –