简单的node.js应用程序控制流程

汤姆·拉文

我对基本应用程序的控制流程有一个简单的菜鸟问题。我有3个带有setTimeout的函数。

console.log("[+] Program start");

function first(){
setTimeout(function(){
  console.log(1);
},3000);}

function second(){
setTimeout(function(){
  console.log(2);
},2000);}

function third(){
setTimeout(function(){
  console.log(3);  
},1000);}

first();
second();
third();

console.log("done");

预期输出如下:

[+] Program start
done
3
2
1

我想控制流程,以便按以下顺序查看内容:

[+] Program start
1
2
3
done

所以我通过以下方式重写了程序:

console.log("[+] Program start");

function first(){
setTimeout(function(){
  console.log(1);
  second();
},3000);}

function second(){
setTimeout(function(){
  console.log(2);
  third();
},2000);}

function third(){
setTimeout(function(){
  console.log(3);  
  call();
},1000);}

first();

function call(){console.log("done ");}

输出为:

[+] Program start
1
2
3
done 

现在输出正常,我想问你,这种方法对吗?用这种正确的方式如何控制流程或如何在node.js中编写?否则我完全走错了路。您能否检查一下,并给我一些提示,建议等。非常感谢您的帮助。

布兰登

如果您要管理操作顺序,则绝对不想使用setTimeout()它来执行操作。setTimeout()设计用于阻止线程执行直到完成,并且使用这种方式会使您的应用程序异常脆弱。

假设您只是尝试管理流程,请阅读Node.js的事件循环的工作原理。以这种方式编写的代码将如下所示(我在其中添加了一些setTimeout()函数来模拟/说明长时间运行的函数):

console.log("[+] Program start")

var first = function(callback) {
    setTimeout(function() {
        console.log(1)
        callback()
    }, 1000)
}

var second = function(callback) {
    setTimeout(function() {
        console.log(2)
        callback()
    }, 1000)
}

var third = function(callback) {
    setTimeout(function() {
        console.log(3)
        callback()
    }, 1000)
}


first(function() {
    second(function() {
        third(function() {
            console.log("done ")        
        })
    })
})

话虽这么说,以这样的嵌套方式使用回调有一个固有的缺点:“回调地狱”。您可以考虑使用诸如async瀑布之功能或Promise库来对您的函数进行模块化

优点:您也可以在ES6中编写功能链更加简洁:

first(() => second(() => third(() =>
    console.log("done ")        
)))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Node.js和Loki.js重新组织简单的应用程序

来自分类Dev

使用Node.js Web应用程序管理图像工作流程吗?

来自分类Dev

声音由应用程序控制

来自分类Dev

无法运行简单的 node.js 应用程序抛出错误:听 EACCES

来自分类Dev

带有控制器的Angular JS应用程序简单示例

来自分类Dev

简单表单节点js应用程序

来自分类Dev

如何在node.js控制台应用程序中应用模块模式?

来自分类Dev

制作非常简单的应用程序,包括前端和后端技能(js,node.js,psql,React ...)

来自分类Dev

简单控制台测试应用程序中的NullPointerException

来自分类Dev

Azure 移动应用程序 - 简单的 API 版本控制

来自分类Dev

为什么Node.js简单的HTTP服务器应用程序无法在服务器上运行?

来自分类Dev

寻找一个简单的设置以将Cloudfront与node.js Express应用程序结合使用

来自分类Dev

通过本地网络在两个 node.js 应用程序之间进行简单通信

来自分类Dev

如何在我的Node.js应用程序中合并模型和控制器?

来自分类Dev

Node.js控制流程

来自分类Dev

Rspec使用应用程序控制器方法

来自分类Dev

Applescript转换为Swift语言(应用程序控制)

来自分类Dev

从didinsertelement视图访问应用程序控制器

来自分类Dev

Rails Navbar 应用程序控制器变量

来自分类Dev

由多个应用程序控制的 UWP gpio

来自分类Dev

保持Node JS应用程序运行

来自分类Dev

如何分发Node JS应用程序?

来自分类Dev

控制台上的简单node.js readline

来自分类Dev

控制台上的简单node.js readline

来自分类Dev

需要帮助为 node-webkit 应用程序创建一个简单的登录

来自分类Dev

简单的数学应用程序

来自分类Dev

简单的 Angular JS 应用程序不起作用

来自分类Dev

从另一个Android应用程序控制Spotify应用程序的播放?

来自分类Dev

从Java Web应用程序控制C应用程序

Related 相关文章

  1. 1

    使用Node.js和Loki.js重新组织简单的应用程序

  2. 2

    使用Node.js Web应用程序管理图像工作流程吗?

  3. 3

    声音由应用程序控制

  4. 4

    无法运行简单的 node.js 应用程序抛出错误:听 EACCES

  5. 5

    带有控制器的Angular JS应用程序简单示例

  6. 6

    简单表单节点js应用程序

  7. 7

    如何在node.js控制台应用程序中应用模块模式?

  8. 8

    制作非常简单的应用程序,包括前端和后端技能(js,node.js,psql,React ...)

  9. 9

    简单控制台测试应用程序中的NullPointerException

  10. 10

    Azure 移动应用程序 - 简单的 API 版本控制

  11. 11

    为什么Node.js简单的HTTP服务器应用程序无法在服务器上运行?

  12. 12

    寻找一个简单的设置以将Cloudfront与node.js Express应用程序结合使用

  13. 13

    通过本地网络在两个 node.js 应用程序之间进行简单通信

  14. 14

    如何在我的Node.js应用程序中合并模型和控制器?

  15. 15

    Node.js控制流程

  16. 16

    Rspec使用应用程序控制器方法

  17. 17

    Applescript转换为Swift语言(应用程序控制)

  18. 18

    从didinsertelement视图访问应用程序控制器

  19. 19

    Rails Navbar 应用程序控制器变量

  20. 20

    由多个应用程序控制的 UWP gpio

  21. 21

    保持Node JS应用程序运行

  22. 22

    如何分发Node JS应用程序?

  23. 23

    控制台上的简单node.js readline

  24. 24

    控制台上的简单node.js readline

  25. 25

    需要帮助为 node-webkit 应用程序创建一个简单的登录

  26. 26

    简单的数学应用程序

  27. 27

    简单的 Angular JS 应用程序不起作用

  28. 28

    从另一个Android应用程序控制Spotify应用程序的播放?

  29. 29

    从Java Web应用程序控制C应用程序

热门标签

归档