Node.js下的异步编程模型是该平台的一大特点,但面对复杂的异步代码实现却造成了非常大的困难。为了解决这个问题,许多异步编程库被开发出来。其中,when.js 是一个高效的 Promise/A+ compliant 的库,允许 Node.js 开发人员用更优雅和精简的代码来解决异步代码的问题。下面,我将分享一份when.js的异步编程实践攻略。
when.js的基础知识
在开始when.js的异步编程实践前,我们需要先学习when.js的基础知识。when.js的核心是Promise/A+,他是一组为异步操作生成一个未来对象的机制。我们可以在这个对象上注册回调函数,当异步操作完成后,这些回调函数将被触发。
安装when.js
在Node.js项目中使用when.js,我们可以通过npm包管理器直接安装它:
npm install when
在Node.js和webbrowser中使用when.js
当我们在Node.js中使用when.js, 我们可以使用 require()函数:
var when = require('when');
当我们在webbrowser中使用when.js,我们可以使用script 导入:
<script type="text/javascript" src="when.js"></script>
使用when.js操作异步代码
下面的几个示例演示了使用when.js操作异步代码:
示例一:使用when.all完成一组异步任务
在这个示例中,我们将介绍如何使用when.js中的when.all()完成一批异步任务。
var when = require('when');
var fs = require('fs');
var readFile = when.lift(fs.readFile);
when.all([
readFile('file1.txt', 'utf-8'),
readFile('file2.txt', 'utf-8'),
readFile('file3.txt', 'utf-8')
])
.spread(function (file1, file2, file3) {
console.log(file1);
console.log(file2);
console.log(file3);
})
.catch(function (err) {
console.log('catch: ' + err.message);
});
在示例中,通过载入Node.js标准库中的fs函数,定义读取文件方法readFile, 然后使用when.all()同时读取一批文件。当读取完成后,then函数中的回调函数被调用。
示例二:使用when.map实现并行序列
在这个示例中,我们将展示如何使用when.js中的when.map()实现并行序列。
var when = require('when');
var fs = require('fs');
var readFile = when.lift(fs.readFile);
when.map(
['file1.txt', 'file2.txt', 'file3.txt'],
function (file) {
return readFile(file, 'utf-8');
}
).then(function (contents) {
console.log(contents);
}).catch(function (err) {
console.log('catch: ' + err.message);
});
当在then()函数中的回调函数被调用时,contents数组包含所有文件的内容,并按序引用。
总结
通过这份when.js的异步编程实践攻略,我们了解了when.js的基础知识,学习了如何使用when.js操作异步代码。通过示例的引导,我们可以更好的体验when.js强大的异步编程能力,更加优雅和精简地解决Node.js中异步代码的问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:node.js下when.js 的异步编程实践 - Python技术站