node.js学习笔记(6) 异步回调

简介:

先来看一下国王的幸福生活:

在nodejs王国,国王有很多仆人。

早上,一个仆人叫醒了国王,问他有什么需要。

国王给他一份清单,上面列举了所有需要完成的任务,然后睡回笼觉去了。

当国王回去睡觉之后,仆人才离开国王,拿着清单,给其它的仆人一个个布置任务。

仆人们各自忙各自的去了,直到完成了自己的任务后,才回来把结果禀告给国王。

国王一次只召见一个人,其它的人就在外面排着队等着。

国王处理完这个结果后,可能给他布置一个新的任务,或者就直接让他走了,然后再召见下一个人。

等所有的结果都处理完了,国王就继续睡觉去了。直接有新的仆人完成任务后过来找他。


--这个故事来自http://www.360doc.com/content/12/0926/15/9579107_238274731.shtml,非常感谢。


在这个故事中,国王就是我们的javascript代码,仆人就是nodejs本身。

国王只有一个,仆人有多个。

javascript是单线程的,nodejs本身却是多线程的。

国王交待了任务给仆人后,自己去睡觉了,并没有一直等待仆人完成。因此,仆人的工作与国王的交待是异步的。

当仆人完成任务后再去告知国王。这就是回调。


callback.js:

var fs = require("fs");

fs.readFile('package.json', function (err, data) {
    if (err)
        return console.error(err);
    console.log('仆人:国王,我的任务完成了。这是结果\n'+data.toString());
});

console.log("国王:任务交待完了,我去睡觉啦!");

运行结果:


lee@mypc ~/works/nodejs/study6 $ node callback.js 
国王:任务交待完了,我去睡觉啦!
仆人:国王,我的任务完成了。这是结果
{
  "name": "application-name",
  "version": "0.0.1"
}


当然,国王也可以一直等到仆人完成了任务在去睡觉。

nocb.js:


var fs = require("fs");

var data = fs.readFileSync('package.json');

console.log('仆人:国王,我完成任务了。这是结果\n'+data.toString());
console.log("国王:哎,我终于可以去睡觉了!");

运行结果如下:


lee@mypc ~/works/nodejs/study6 $ node nocb.js
仆人:国王,我完成任务了。这是结果
{
  "name": "application-name",
  "version": "0.0.1"
}

国王:哎,我终于可以去睡觉了!

以上两种方案,第一种是异步回调的方式,国王安排完任务就可以轻松得去睡回笼觉了。第二种方式是同步的方式,国王必须等待仆人完成了任务才能去睡觉,如果这个任务特别难,那国王也只有等着干着急……


目录
相关文章
|
1天前
|
JSON 前端开发 JavaScript
在 JavaScript 中,如何使用 Promise 处理异步操作?
通过以上方式,可以使用Promise来有效地处理各种异步操作,使异步代码更加清晰、易读和易于维护,避免了回调地狱的问题,提高了代码的质量和可维护性。
|
27天前
|
JavaScript 前端开发 开发者
掌握Node.js中的异步编程:从回调到async/await
Node.js的异步编程模型是其核心特性之一,它使得开发者能够构建高性能和高并发的应用程序。本文将带你从Node.js的异步编程基础开始,逐步深入到回调函数、Promises、以及最新的async/await语法。我们将探讨这些异步模式的原理、使用场景和最佳实践,并通过实例代码展示如何在实际项目中应用这些概念。
|
28天前
|
前端开发 JavaScript 开发者
JS 异步解决方案的发展历程以及优缺点
本文介绍了JS异步解决方案的发展历程,从回调函数到Promise,再到Async/Await,每种方案的优缺点及应用场景,帮助开发者更好地理解和选择合适的异步处理方式。
|
2月前
|
前端开发 JavaScript 数据库连接
掌握 JavaScript 异步编程:从回调到 Async/Await
在现代 JavaScript 开发中,异步编程是处理非阻塞操作的关键技术。本文从早期的回调函数讲起,逐步过渡到 Promise 和 ES2017 的 async/await 语法,展示了异步编程如何变得更加简洁和强大。通过实用的技巧和最佳实践,帮助开发者避免常见陷阱,提升代码效率和可靠性。
|
2月前
|
JavaScript 前端开发 API
Vue学习笔记3:对比纯JavaScript和Vue实现数据更新的实时视图显示
Vue学习笔记3:对比纯JavaScript和Vue实现数据更新的实时视图显示
|
2月前
|
Prometheus 监控 Cloud Native
prometheus学习笔记之node-export
prometheus 监控 node-exporter
|
26天前
|
前端开发 JavaScript UED
深入了解JavaScript异步编程:回调、Promise与async/await
【10月更文挑战第11天】深入了解JavaScript异步编程:回调、Promise与async/await
11 0
|
1月前
|
移动开发 JavaScript 前端开发
【JavaScript】JS执行机制--同步与异步
【JavaScript】JS执行机制--同步与异步
19 0
|
1月前
|
JavaScript 前端开发
【干货分享】JavaScript学习笔记分享
【干货分享】JavaScript学习笔记分享
52 0
|
2月前
|
JavaScript 前端开发
一个js里可以有多少个async function,如何用最少的async function实现多个异步操作
在 JavaScript 中,可以通过多种方法实现多个异步操作并减少 `async` 函数的数量。
下一篇
无影云桌面