![](/img/trans.png)
[英]Writing an asynchronous method in Javascript (Code run in Node.js)
[英]Non-Asynchronous code in Javascript (node.js)
來自sysadmin背景,我正在嘗試將node用於一些腳本任務。 (解析一些文本,推送到MongoDB
等)
我已經在此工作了好幾個小時,這就是我可以使其以間隔2秒的間隔打印1-2-3的方式。 否則,所有這些將立即被打印。
我一直在閱讀有關Promises
和Async/await
但是在繼續進行這些抽象之前,我想了解其核心概念。
這是怎么回事 (原諒不好的模式)
"use strict" //let arg = process.argv.slice(2) let arg = [1,2,3] function d(fn){ return setTimeout(fn,2000) } let a = x=>{ let b = x=>{ let c = x=>{ d(y=>console.log(arg[2])) } d( y=>{ console.log(arg[1]) return c() } ) } d( y=>{console.log(arg[0]) return b() } ) } a()
如果要以更簡潔的方式編寫這些內容,但沒有Promises
或Async/await
,那會是什么?
這樣,您可以將其寫為不嵌套的。
function fn0() {
console.log(arg[0]);
// wait another 2s then call fn1
setTimeout(fn1, 2000);
}
function fn1() {
console.log(arg[1]);
// wait again 2s then call fn2
setTimeout(fn2, 2000);
}
function fn2() {
console.log(arg[2]);
}
// wait 2s then call fn0
setTimeout(fn0, 2000);
這是一個使用遞歸調用來避免嵌套回調的選項。 這適用於任何大小的數組。
let arg = [1, 2, 3];
function next(i) {
if (arg[i]) {
setTimeout(() => {
console.log(arg[i]),
next(i+1);
}, 2000);
}
}
next(0);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.