0
を呼び出して、私はそれに接続されている4つの機能があるボタンがあります。ng-click
時にジャバスクリプト/ angularjs機能の順序は
<button type="button" data-dismiss="modal" data-toggle= "modal" href="#booking" class="btn btn-success" ng-click="createResource(); cancelFirstModal(); confirmNumberOfBooking(); showSecondModal(); " >Create Bookings</button>
を、createResource()
はその後、最初に呼ばれるようにconfirmNumberOfBookings()
ですが、Safariで私のコンソール出力は、そうでないと言います:
$scope.createResource = function() {
console.log('create is called');
$http.post('/api/v1/resource', $scope.newResource).then(function (response) {
console.log('post is called');
});
};
$scope.confirmNumberOfBooking = function(){
//$scope.numberOfBookings = 3;
console.log('confirm is called');
$scope.newResource.booking = [
{
startDateTime: "datetime",
endDateTime: "datetime"
}
];
for(var i = 0; i < $scope.newResource.numberOfBookings; i++){
$scope.newResource.booking.push({startDateTime: "datetime",endDateTime: "datetime"});
}
};
は、私の質問は、なぜ$http.post
は最後呼び出されるんですか?それはconfirmNumberOfBookings()
の前に技術的に宣言されています。
これは意味があります!約束が解決される前に 'confirmNumberOfBookings()'を呼び出す方法はありますか? – asus
はい、ありますが、私の提案は、ng-click機能のオーダーでフローに依存するのではなく、ng-clickで1つの関数を呼び出して、その関数またはロジックのフローを制御することです。 例えば、ng-click = "bookingConfirmation" $ scope.bookingConfirmation =()=> {// createResourceコールはできるだけそれを約束して、約束が解決されたら2番目の関数を呼び出すなどの約束をします。 } –
関数が同期関数か非同期関数かによっても異なります。もしそれらが同期関数であれば、呼び出された順序に頼ることができますが、それらが約束を使用していないと、前の関数呼び出しが解決されたときに次のステップだけを実行し、次の関数を呼び出すことができます。たとえば、このフィドルをチェックしてください。 http://jsfiddle.net/perdeepOsingh/bu0ooz6b/2/ –