Javascript Node.js如何同步执行以下功能
我想在不改变时间的情况下同步执行下面的函数,输出为123。如何使用node.jsJavascript Node.js如何同步执行以下功能,javascript,node.js,Javascript,Node.js,我想在不改变时间的情况下同步执行下面的函数,输出为123。如何使用node.js function f1(){ setTimeout(function() { console.log('Hi I am order 1'); }, 3000); } function f2() { setTimeout(function() { console.log('Hi I am order 2'); }, 2000); } function f3() { setTim
function f1(){
setTimeout(function() {
console.log('Hi I am order 1');
}, 3000);
}
function f2() {
setTimeout(function() {
console.log('Hi I am order 2');
}, 2000);
}
function f3() {
setTimeout(function() {
console.log('Hi I am order 3');
}, 1000);
}
f3();
f2();
f1();
是同步不同函数的更好方法,但是一种更容易(尽管更难维护)的方法是为每个函数添加一个参数,该参数执行下一步需要调用的任何函数
function f1(func) { setTimeout(function() { console.log('Hi I am order 1'); func(); }, 3000); }
function f2(func) { setTimeout(function() { console.log('Hi I am order 2'); func(); }, 2000); }
function f3(func) { setTimeout(function() { console.log('Hi I am order 3'); func(); }, 1000); }
f1(f2(f3)));
另一种方法是使用setTimeout
函数本身,如下所示:
function f1() { setTimeout(function() { console.log('Hi I am order 1'); f2(); }, 3000); }
function f2() { setTimeout(function() { console.log('Hi I am order 2'); f3(); }, 2000); }
function f3() { setTimeout(function() { console.log('Hi I am order 3'); }, 1000); }
f1();
但是,如果要进行任意嵌套,则此方法的灵活性较低
编辑:修复了第一个示例中的一个错误。由于函数调用顺序,您的问题似乎不正确。看起来您想先调用f1() 2018年,您可以将ES6与异步/等待一起使用:
let delay=(时间)=>新承诺((解析)=>setTimeout(解析,时间))
异步函数f1(){
等待延迟(3000)
console.log('你好,我是订单1')
}
异步函数f2(){
等待延迟(2000年)
console.log('你好,我是订单2')
}
异步函数f3(){
等待延迟(1000)
console.log('Hi I am order 3');
}
void异步函数运行(){
//它可以一个接一个地运行
等待f1()
等待f2()
等待f3()
//或者它可以并行运行
//然后你就失去了秩序
//等待承诺。全部([f3(),f2(),f1())
}()
一点代码重构
function f1(){
console.log('Hi I am order 1');
}
function f2() {
console.log('Hi I am order 2');
}
function f3() {
console.log('Hi I am order 3');
}
function delay(func, interval) {
return new Promise(resolve => {
setTimeout(() => {
func();
resolve();
}, interval)
})
}
(async () => {
await delay(f1, 3000);
await delay(f2, 2000);
await delay(f3, 1000);
})();
- 函数
、f1
和f2
应该只关注它的功能f3
- 使用
wrapper延迟执行delay
- 使用
确保同步执行wait