我有兩個async
函數。他們兩個都在等待兩個3秒的函數調用。但第二個比第一個快。我認爲更快的是並行運行和其他串行運行。我的假設是否正確?如果是的話,爲什麼這兩個功能在邏輯上看起來是一樣的?如何異步/等待串行和並行工作?
function sleep() {
return new Promise(resolve => {
setTimeout(resolve, 3000);
});
}
async function serial() {
await sleep();
await sleep();
}
async function parallel() {
var a = sleep();
var b = sleep();
await a;
await b;
}
serial().then(() => {
console.log("6 seconds over");
});
parallel().then(() => {
console.log("3 seconds over");
});
你爲什麼認爲'setTimeout'是異步的?除了函數聲明外,代碼中沒有任何異步。 – Mjh
@Mjh Errm,'setTimeout'就是非同尋常的異步......而且OP的代碼中的其他所有東西都是異步的...... – Frxstrem
@Frxstrem除了'setTimeout'根本不是異步的。這是一個同步函數,它告訴事件循環以後再執行一個函數。這是*機制*,在這段代碼中絕對沒有異步。哪兩個運動部件以不同的速度在不同的執行環境中運動?零。因此,這個代碼根本不是異步的。 – Mjh