2016-08-11 14 views
0

私は、約束事を使って変数値(例えば、ajax呼び出しの応答)を設定する方法を考え出しています。約束事を使って変数値を設定する方法

私はインスタンスを持っている:

getVariable(id) { 
    return $.ajax({ 
    //... 
}).done(function(response) { 
    //... getVariable return response 
}).fail(function(response) { 
    //... getVariable return something_else 
}); 
    // ... 

getVariableはアヤックス(または任意の他の非同期)を1回行われ、応答値()への約束から変更する必要があります

something.value = getVariable('id'); // { id : 'Adam Smith' } 

+0

約束は非同期コードを同期させないので、これを行うことはできません –

+0

唯一の方法は値をコールバック権に割り当てることです。 – Daniele

+0

あなたが意味することを理解している場合は –

答えて

1

変数を直接設定することはできません。あなたの操作が非同期であるため、非同期操作の結果を確実に使用できる唯一の場所は、.done()または.then()などの約束ハンドラ内です。したがって、結果をいくつかの変数に設定し、その変数を他のコードで使用することを期待すると、通常正しく機能しません。通常、タイミングの問題が発生します。

代わりに、実際にpromiseハンドラのコールバック内で変数を使用する非同期結果を使用してプログラミングする方法を学ぶ必要があります。あなたはそれを保存せず、他のコードでそれを使用することを期待します。

function getVariable(id) { 
    return $.ajax({...}); 
}); 

getVariable(...).then(function(response) { 
    // process result here 
    // don't just store it somewhere and expect other code to use that stored 
    // value. Instead, you use the result here and put whatever code 
    // needs that value in here. 
}, function(err) { 
    // handle error here 
}); 
関連する問題