如果你想有一個純粹的異步調用那麼它可能看起來像:
var loopfunction = function(version:string) : void {
setTimeout(function(){
console.log("Begin" + version + " Loop")
for (let i = 0; i <= 10; i++) {
console.log(version + "Number looping through is " + i)
}
console.log("End Loop")
}, 0);
}
console.log("Calling sync function")
loopfunction("First : ");
loopfunction("Second : ");
loopfunction("Third : ");
console.log("ending sync function")
如果你正在考慮創建並返回一個承諾:
var loopfunction = function(version:string) {
return new Promise(function(resolve){
console.log("Begin" + version + " Loop")
for (let i = 0; i <= 10; i++) {
console.log(version + "Number looping through is " + i)
}
console.log("End Loop")
resolve();
});
}
console.log("Calling sync function")
loopfunction("First : ");
loopfunction("Second : ");
loopfunction("Third : ");
console.log("ending sync function")
然而,在這種情況下,你並沒有等待承諾。如果你要等待(所以在「同步」執行承諾的方式),那麼:
var loopfunction = function(version:string) {
return new Promise(function(resolve){
console.log("Begin" + version + " Loop")
for (let i = 0; i <= 10; i++) {
console.log(version + "Number looping through is " + i)
}
console.log("End Loop")
resolve();
});
}
console.log("Calling sync function")
loopfunction("First : ").then(function(){
return loopfunction("Second : ");
}). then(function(){
return loopfunction("Third : ");
}). then(function(){
console.log("ending sync function")
});
UPDATE
如果你想看到不同的順序結果,那麼你可以試試這個:
var loopfunction = function(version:string) {
return new Promise(function(resolve) {
//wait for some random time before executing the code
setTimeout(function(){
console.log("Begin" + version + " Loop")
for (let i = 0; i <= 10; i++) {
console.log(version + "Number looping through is " + i)
}
console.log("End Loop")
resolve();
}, Math.floor((Math.random() * 1000) + 1));
});
}
試試這個https://caolan.github.io/async/ – Taki
什麼是你的實際目標這裏?你不能實際上使一組同步的代碼異步運行。 node.js中的異步代碼使用本機代碼在後臺完成實際操作,然後使用回調通知告訴您何時完成。您可以更改同步代碼的時間(運行在下一個時間點或某個計時器觸發後),但它不會實際異步運行。每當它運行時,它仍然是同步的。 – jfriend00
非常感謝,這回答了我的問題:) – Sibi