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
        }
        )

        }
 }

  }    

実際には、検証関数でエラーが発生した場合、保存関数をスキップしたいと考えています。ループを壊して 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 ...

ステップスルーしようとしているメイン関数の 1 つに戻ると、ステップは停止します。

ただし、それはあなたのユースケースを探します.あなたが説明しているものに似たものを組み込み、最終的に単一のエラー関数でエラーを処理できる 非同期ライブラリのウォーターフォールを使用することをお勧めします.

于 2012-11-01T07:50:42.833 に答える