时间:2021-05-18
1. 回调金字塔及理想中的解决方案
我们都知道javascript是一门单线程异步非阻塞语言。异步非阻塞当然是它的一个优点,但大量的异步操作必然涉及大量的回调函数,特别是当异步嵌套的时候,就会出现回调金字塔的问题,使得代码的可读性非常差。比如下面一个例子:
var fs = require('fs');fs.readFile('./file1', function(err, data) {console.log(data.toString());fs.readFile('./file2', function(err, data) {console.log(data.toString());})})这个例子是先后读取两个文件内容并打印,其中file2的读取必须在file1读取结束之后再进行,因此其操作必须要在file1读取的回调函数中执行。这是一个典型的回调嵌套,并且只有两层而已,在实际编程中,我们可能会遇到更多层的嵌套,这样的代码写法无疑是不够优雅的。
在我们想象中,比较优雅的一种写法应该是看似同步实则异步的写法,类似下面这样:
var data;data = readFile('./file1');//下面的代码是第一个readFile执行完毕之后的回调部分console.log(data.toString());//下面的代码是第二个readFile的回调data = readFile('./file2');console.log(data.toString());这样的写法,就完全避免回调地狱。事实上,koa就让我们可以使用这样的写法来写异步回调函数:
var koa = require('koa');var app = koa();var request=require('some module');app.use(function*() {var data = yield request('http:///mly-zju/async-js-demo,其中promise_generator.js就是本篇的示例源码。以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
前言koa被认为是第二代web后端开发框架,相比于前代express而言,其最大的特色无疑就是解决了回调金字塔的问题,让异步的写法更加的简洁。在使用koa的过程
本文实例讲述了nodejs异步编程基础之回调函数用法。分享给大家供大家参考,具体如下:Node.js异步编程的直接体现就是回调。异步编程依托于回调来实现,但不能
本文实例讲述了Nodejs异步回调之异常处理。分享给大家供大家参考,具体如下:目前我们项目的Nodejs异常是通过expressnext到errorhandle
Deferred对象在Twsited框架中用于处理回调,这对于依靠异步的Twisted来说十分重要,接下来我们就以实例解析Python的Twisted框架中De
5.异步队列Deferred5.1概述异步队列是一个链式对象,增强对回调函数的管理和调用,用于处理异步任务。异步队列有三种状态:初始化(unresolved),