2016-08-11 5 views
2

私は多くのことをpromisesについて読んだことがありますが、まだ実装方法がわかりません。javascriptで 'Async = false'を約束する方法は?

私はという名前のAJAXコールを作成しましたが、これは動作するためには約束していましたが、async=falseは推奨されていません。

self.getBalance = function (order) { 
    var balance; 
    $.ajax({ 
     url: "/API/balance/" + order, 
     type: "GET", 
     async: false, 
     success: function (data) { 
      balance = data; 
     }, 
     done: function (date) { 
     } 
    }); 
    return balance; 
} 

私を助けることができますか?私はそれを理解するための例が必要です。

+0

あなたは非同期= falseの行動を避けるために、あなたのロジックを構築しようとする必要がありますしてもよいし、あなたが約束して、あなたがそれらを必要とするたびに、物事をロードしようとする必要がありますが、あなたはそれらをキャッチすることを決定したりすることはできません約束の方法の中で。 – fbiagi

答えて

3

getBalanceメソッドからの戻り約束オブジェクト:

self.getBalance = function (orderNumber) { 
    return $.ajax({ 
     url: "/Exchange.API/accountInfo/balance/" + orderNumber, 
     type: "GET" 
    }); 
} 

と、このように、後でそれを使用する:最初のポイントとして

service.getBalance().then(function(balance) { 
    // use balance here 
}); 
+0

あなたの答えをありがとう、ちょうど私に短い説明を与えることができますか?とにかく 'then'が実行されますか? (失敗または成功) – user3378165

+0

最初のメソッドは、成功すると実行されます。失敗したときに実行されるパラメータとして2番目のメソッドを追加できます。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then – fbiagi

+0

'then'は、サーバからの応答がロードされたときに実行される2つのコールバック関数を取ります:' then(function successCallback(レスポンス){/ *データが正常にロードされた* /}、function errorCallback(エラー){console.log(エラー);}) '。 – dfsq

4

に、あなたはそれとしてfalseに非同期呼び出しを設定する必要はありませんUIをロックします。

ajaxオブジェクトを返すメソッドを簡略化し、それを約束として扱うことができます。あなたが約束を学習している場合は

self.getBalance = function (orderNumber) {  
    return $.ajax({ 
     url: "/Exchange.API/accountInfo/balance/" + orderNumber, 
     type: "GET", 
    }); 
}; 
var demoNumber = 12; 
self.getBalance(demoNumber).then(function(data){ 
    console.log(data); 
},function(err){ 
    console.log("An error ocurred"); 
    console.log(err); 
});