2017-09-19 18 views
0

を終了するのを待って、私はAngular.jsコントローラで、以下の機能を持っている:約束内の関数が

vm.some_action = function() { 
    var promise = IDService.getUserInfo().then(function(user) { 
     vm.user.name = user.name; 
     vm.box.color = 'red'; 
     vm.save() 
    }, function(errorResponse) { 
     Toast.error("Failed:", errorResponse); 
    }) 

    $q.resolve(promise).then(function() { 
     $location.path('/home'); 
    }) 
} 

すべての機能が終了する約束以内に呼び出すだけにして/homeにリダイレクトするためにそれを待つ必要があります。しかし、それは3つすべて(2つの割り当てとsave()への呼び出し)を実行し、直ちにリダイレクトするようです。 save()の機能が終了するのを待つように指示する魔法の方法は何ですか?以下のような

+2

'vm.save()'非同期のですか?それは約束を返しますか? –

+0

はい、非同期です(愚かなQ:JS非同期のすべての関数ではありませんか?)何も返されません。 – mart1n

+0

愚かな質問はありません:)すべてのJS関数が非同期です。 –

答えて

1

チェーンあなたの約束:

vm.some_action = function() { 
 
    IDService.getUserInfo().then(function(user) { 
 
     vm.user.name = user.name; 
 
     vm.box.color = 'red'; 
 
     return vm.save() 
 
    }).then(function() { 
 
     $location.path('/home'); 
 
    }, function(errorResponse) { 
 
     Toast.error("Failed:", errorResponse); 
 
    }); 
 
}

+0

'vm.save()'関数がこれを動作させるために何かを返す必要がありますか? – mart1n

+0

それを理解しました。はい、保存機能は成功/失敗の結果を返す必要があります。あなたの答えをありがとう、素晴らしい仕事! – mart1n