[英]How to run parseString() function synchronously in Javascript node.js
[英]Node.js How to excecute the below function synchronously
我想在不更改時間的情況下同步執行以下功能,輸出將是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() {
setTimeout(function() {
console.log('Hi I am order 3');
}, 1000);
}
f3();
f2();
f1();
由於函數調用順序,您的問題似乎不正確。 看來您想先調用f1()?
在2018年,您可以將ES6與async / await一起使用:
let delay = (time) => new Promise((resolve) => setTimeout(resolve, time)) async function f1(){ await delay(3000) console.log('Hi I am order 1') } async function f2() { await delay(2000) console.log('Hi I am order 2') } async function f3() { await delay(1000) console.log('Hi I am order 3'); } void async function run () { // It can be runned one-by-one await f1() await f2() await f3() // Or it can be runned in parallel // And then you lost ordering // await Promise.all([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
應該只關注其功能 delay
包裝器延遲執行 await
來確保同步執行 JavaScript Promises是同步不同功能的更好方法,但是更簡單(盡管更難維護)的方法是在每個函數中添加一個參數,以執行下一步需要調用的任何函數。
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();
但是,如果要執行任意嵌套,則此方法的靈活性較差。
編輯:修復了我的第一個示例中的一個錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.