想问一下这样的代码是否嵌套很深,怎么用async.waterfall这样的方法来重构啊,大神们,能不能提供个思路啊
发布于 9 年前 作者 jbkzty 3870 次浏览 最后一次编辑是 8 年前 来自 问答

anli.png

有些回调需要调用上面一个回调之后处理过的结果,对于怎么重构这个代码,我有点迷糊,希望大神帮我看看。

8 回复

用 eventproxy 或 Q 之类,也可以自己写 promise 来简化

async.waterfall([ function(cb) { log('1.1.1: ', ‘start’); cb(null, 3); }, function(n, cb) { log('1.1.2: ',n); t.inc(n, cb); }, function(n, cb) { log('1.1.3: ',n); t.fire(n*n, cb); } ], function (err, result) { log('1.1 err: ', err); log('1.1 result: ', result); });

这种经典callback hell问题 你可以安装个q模块或者bluebird 用promise写的好看点 举个例子 fs.readFile(fileA, function (err, data) { fs.readFile(fileB, function (err, data) { // … }); }); 可以改写为 var readFile = require(‘fs-readfile-promise’);

readFile(fileA) .then(function(data){ console.log(data.toString()); }) .then(function(){ return readFile(fileB); }) .then(function(data){ console.log(data.toString()); }) .catch(function(err) { console.log(err); });

@kenshinhu 恩,谢谢。

@wp3xpp 我大概知道怎么改了,谢谢哈

其实关于编码风格你可以参考下 深入浅出node.js 最后章节部分有介绍。感觉你们项目的编码风格很大不同

// error
if (1) 
	return 1;

// right
if (1) {
	return 1;
}

// error
var a = 1
,b = 2
,c = 3;

// right
var a = 1;
var b = 2;
var c =3;

当然coding standard这个只要项目统一就可以 我只是顺带提下

@hinson0 恩,谢谢哈

回到顶部