下面是代码 就是想按顺序的方式读取下文件内容… 哪里错了 ps 各位用什么来处理异步的了?
var co = require(‘co’); var fs = require(“fs”);
function readFile(filename) { return function(callback) { fs.readFile(filename, ‘utf8’, function(err,data){ callback({ err : err, data : data }) }); }; }
co(function* () { var file1 = yield readFile(’./txt/1.txt’); var file2 = yield readFile(’./txt/2.txt’); console.log(file1); console.log(file2); return ‘done’; })
你的引号用的中文
yield 后面跟的方法,要返回的是一个promise, 。用bluebird模块。
var co = require('co');
var fs = require('fs');
function readFile(filename) {
return function(callback) {
fs.readFile(filename, 'utf8', callback);
};
}
co(function* () {
var file1 = yield readFile('./txt/1.txt');
var file2 = yield readFile('./txt/2.txt');
console.log(file1);
console.log(file2);
return 'done';
})
readFile 回调函数不是你这么写的,要遵守 Node.js的Error-first回调模式!
- 回调函数的第一个参数保留给一个错误error对象,如果有错误发生,错误将通过第一个参数err返回。
- 回调函数的第二个参数为成功响应的数据保留,如果没有错误发生,err将被设置为null, 成功的数据将从第二个参数返回。
所以
function readFile(filename) {
return function(callback) {
fs.readFile(filename, 'utf8', function(err, data){
if(err){
return callback(err);
}
return callback(null, data);
});
};
}
这样可以简写成:
function readFile(filename) {
return function(callback) {
fs.readFile(filename, 'utf8', callback);
};
}
co 模块后面可以是一个function。
/**
* Convert a `yield`ed value into a promise.
*
* @param {Mixed} obj
* @return {Promise}
* @api private
*/
function toPromise(obj) {
if (!obj) return obj;
if (isPromise(obj)) return obj;
if (isGeneratorFunction(obj) || isGenerator(obj)) return co.call(this, obj);
if ('function' == typeof obj) return thunkToPromise.call(this, obj);
if (Array.isArray(obj)) return arrayToPromise.call(this, obj);
if (isObject(obj)) return objectToPromise.call(this, obj);
return obj;
}
在co源码中可以把 function,Array,Object等转化为Promise对象~
我还想把几个参数合并成一个对象了
想当然了
多谢各位!~