实现如下流程,用什么方式比较好。
发布于 9 年前 作者 yiranrucianjing 3343 次浏览 最后一次编辑是 8 年前 来自 问答

<p>前面的如果已经报错就直接返回,后面的不执行了,有好的实现方式吗,这样如果层太多了的话不好:</p>

<pre><code> userModel.checkName(function(err, id){ if(err){ req.json({msg : ‘…’}); }else{ userModel.checkTel(function(err, id){ if(err){ req.json({msg : ‘…’}); }else{ //… } }); } }); </code></pre>

7 回复

没人回答么

promise.then().then()…catch()

中间任何一个then 出错, reject, 调用catch

async series 也可以

async.series([
    function(){ ... },
    function(){ ... }
]);

@leapon series 具体的实现呢?

比较急的话可以用async先搞定吧,长远角度你可以去看看bluebird(Promise的实现)这类的

你这个 checkName 和 checkTel 是异步的吗? 不太可能吧? 只是数据校验的话,validator 可以看下。很多 orm 框架也有带 validation 。可以看看。

@yiranrucianjing

async.series([
    function(callback){
        userModel.checkName(function(err, id){ 
		    if (err) {
			    callback(err, 'checkName');
			} else {
			    // do your stuff with checkName
                callback(null, 'checkName');
			}
		});
    },
    function(callback){
        userModel.checkTel(function(err, id){ 
		    if (err) {
			    callback(err, 'checkTel');
			} else {
			    // do your stuff with checkTel
                callback(null, 'checkTel');
			}
    }
],
function(err, results){
    // results is now ['checkName', 'checkTel'] when no error is raised
});
回到顶部