2016-06-16 7 views
1

は、ここでは、コードです:Javascriptの約束/正しい順序で実行していない

vm.saveData = function(data) { 

      demoService.saveData(data, function(response) { 
       if (response.status === 200) { 
        principal.identity(true).then(function() { 
         $state.reload(); 
         return toastr.success('Success'); 
        }); 

       } 
       return toastr.error('Failure'); 
      }); 
} 

APIからの成功応答を取得するには、それだけで「成功」のメッセージが表示されます。しかし代わりに、最初に '失敗'メッセージを表示してから '成功'メッセージを表示します。私は間違って何をしていますか?私はタイムアウトをかけなければならないのですか、私はここで行方不明のものがありますか?

+1

「else」の戻りエラー。 –

+0

はい、それは最も簡単な解決策であり、それも機能しています。私が他の人を使っているなら、単にメッセージを表示してそこから戻ることをトーストすることができます。しかし、私は何かが間違っていることを知っています。それはなぜ動作していないのですか。私はただ自分の過ちがどこにあるのか知りたかっただけです。 – Samridhi

+0

約束のベスト・説明:https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html –

答えて

1

ステータスが200の場合、後でsuccessを呼び出す約束を設定します。

ステータスが何であるかにかかわらず(ifの外にあり、elseを使用していないため)、常にerrorと呼ばれます。

おそらくあなたは、まさにこのようなAJAXなどelse

+0

エラーメッセージは、ステータスが200でない場合にのみ呼び出されます。 – Samridhi

+0

@Samridhi - 間違っています。この答えの2番目の段落、特に括弧内のセクションで、理由を説明しています。 – Quentin

0

多くのシステムにreturn toastr.error('Failure');を移動するには、タスクの進捗を示すために、複数のメッセージを送信します。それ以前のメッセージは無視します。失敗メッセージは、アクションが完了していない間の以前のイベントからのものです。

1

これはセットアップの約束ではありません。約束は.then()を使用します。関数をコールバックとして渡すだけです。

vm.saveData = function(data) { 

    demoService 
    .saveData(data) 
    .then(success, error); 

    function success(response) { 
    principal.identity(true).then(function() { 
     $state.reload(); 
     return toastr.success('Success'); 
    }); 
    } 

    function error(response) { 
    return toastr.error('Failure'); 
    } 
}; 
0

私は間違いを発見しました。 'return'を追加すると問題が解決しました。

'リターンprincipal.identity(真).then(関数(){

//ここ

何かをします});'

vm.saveData = function(data) { 

      demoService.saveData(data, function(response) { 
       if (response.status === 200) { 
        return principal.identity(true).then(function() { 
         $state.reload(); 
         return toastr.success('Success'); 
        }); 

       } 
       return toastr.error('Failure'); 
      }); 
} 
関連する問題