簡體   English   中英

Javascript(node.js)中的非異步代碼

[英]Non-Asynchronous code in Javascript (node.js)

來自sysadmin背景,我正在嘗試將node用於一些腳本任務。 (解析一些文本,推送到MongoDB等)

我已經在此工作了好幾個小時,這就是我可以使其以間隔2秒的間隔打印1-2-3的方式。 否則,所有這些將立即被打印。

我一直在閱讀有關PromisesAsync/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() 

如果要以更簡潔的方式編寫這些內容,但沒有PromisesAsync/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM