0

我正在使用步骤库进行同步行为以验证和保存联系人,

以下是我现在正在使用的代码

exports.actions = function(req, res, ss) {

var Step= require('step');
req.use('session');

return {

        addCon:function(contactObject){

        Step(
        function validation(){
            var accounts =contactObject.contacts.accounts;
            accounts.forEach(function(){
                //database call
                services.user.get(updateObj,function(err,rec){

                    if(err || rec == null)
                     {
                        res("Saving Contact Failed,user Does Not Exist");
                        //here responding to client for showing alert message
                        return false;
                    }
                    if(userId === rec.friendId){
                        res("Error");
                        //here responding to client for showing alert message
                        return false;
                    }

                });
            });
        },
        function saving(){
            //saving 
        }
        ,
        function pusblishing tofriend(){
            //stuff
        }
        )

        }
 }

  }    

实际上,如果验证功能发生任何错误,我想跳过保存功能。并且任何打破循环的想法, return false 都行不通。

4

1 回答 1

0

我不是 100% 一步,但看起来你可以将它this作为回调函数传递,这将使你能够传递错误然后抛出错误(如文档中所示)。

你遇到的问题是你在循环的函数中返回,所以它将结束那个函数而不是更大的Step函数。您最好在这样的this函数之一的末尾传递一个函数,然后再进行错误检查:

Step(
    function hello() {
        console.log('Hello');
        this(err, 'Hello');
    },
    function howareyou (err, greeting) {
        if (err) return something ...

当您返回它试图单步执行的主要功能之一时,Step 将停止。

但是,它会寻找您的用例,最好使用异步库的瀑布,它具有类似于您所描述的内置内容,并且您最终可以在单个错误函数中处理错误。

于 2012-11-01T07:50:42.833 回答