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"
}

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

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


目录
相关文章
|
6月前
|
JavaScript 前端开发 开发者
Node学习笔记:HTTP模块
总的来说,Node.js的HTTP模块是一个强大的工具,可以帮助你处理HTTP协议的各种需求。无论你是想开设自己的餐厅(创建服务器),还是想去别的餐厅点菜(发出请求),HTTP模块都能满足你的需求。
167 18
|
9月前
|
Web App开发 JavaScript 前端开发
如何在JavaScript中确定异步操作之间的依赖关系?
如何在JavaScript中确定异步操作之间的依赖关系?
214 58
|
9月前
|
前端开发 JavaScript
有没有方法可以保证在JavaScript中多个异步操作的执行顺序?
有没有方法可以保证在JavaScript中多个异步操作的执行顺序?
384 58
|
8月前
|
JavaScript 前端开发 API
JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)
array.map()可以用来数据转换、创建派生数组、应用函数、链式调用、异步数据流处理、复杂API请求梳理、提供DOM操作、用来搜索和过滤等,比for好用太多了,主要是写法简单,并且非常直观,并且能提升代码的可读性,也就提升了Long Term代码的可维护性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
8月前
|
消息中间件 JavaScript 前端开发
最细最有条理解析:事件循环(消息循环)是什么?为什么JS需要异步
度一教育的袁进老师谈到他的理解:单线程是异步产生的原因,事件循环是异步的实现方式。 本质是因为渲染进程因为计算机图形学的限制,只能是单线程。所以需要“异步”这个技术思想来解决页面阻塞的问题,而“事件循环”是实现“异步”这个技术思想的最主要的技术手段。 但事件循环并不是全部的技术手段,比如Promise,虽然受事件循环管理,但是如果没有事件循环,单一Promise依然能实现异步不是吗? 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您
|
JSON 前端开发 JavaScript
在 JavaScript 中,如何使用 Promise 处理异步操作?
通过以上方式,可以使用Promise来有效地处理各种异步操作,使异步代码更加清晰、易读和易于维护,避免了回调地狱的问题,提高了代码的质量和可维护性。
|
前端开发 JavaScript 开发者
JS 异步解决方案的发展历程以及优缺点
本文介绍了JS异步解决方案的发展历程,从回调函数到Promise,再到Async/Await,每种方案的优缺点及应用场景,帮助开发者更好地理解和选择合适的异步处理方式。
|
JavaScript 前端开发 开发者
掌握Node.js中的异步编程:从回调到async/await
Node.js的异步编程模型是其核心特性之一,它使得开发者能够构建高性能和高并发的应用程序。本文将带你从Node.js的异步编程基础开始,逐步深入到回调函数、Promises、以及最新的async/await语法。我们将探讨这些异步模式的原理、使用场景和最佳实践,并通过实例代码展示如何在实际项目中应用这些概念。
|
移动开发 JavaScript 前端开发
【JavaScript】JS执行机制--同步与异步
【JavaScript】JS执行机制--同步与异步
235 1
|
前端开发 JavaScript UED
深入了解JavaScript异步编程:回调、Promise与async/await
【10月更文挑战第11天】深入了解JavaScript异步编程:回调、Promise与async/await
152 0