如果你想有一个纯粹的异步调用那么它可能看起来像:
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