0

私はこのタイプの呼び出しを頻繁に使用しているため、これを再利用可能にしたいと考えています。

function getJSON(cmd){
   $.getJSON(cmd, function(data) {
   }).done(function(data) {
       return data;
   }).fail(function() { console.log('Server failed!') });
}

私はそれを次のように使いたいと思っていました:

function susbcribe(id){
   var cmd = 'subscribe.php?='+id;
   var obj = getJSON(cmd);
   console.log(obj);    
}

しかし、javascript は、非同期 json が obj に何かを返す前に console.log を実行します。

明確にするために、.done()内でコードを実行できることは知っていますが、これを頻繁に使用するため、同じ関数を何度も書き直すのをやめたいと思います。

問題は、js を停止させ、 getJSON が終了して obj に何かを返すのを待つ方法はありますか?

4

1 に答える 1

0

現状では、少なくともdone毎回関数を作成する必要があります。コールバックが存在しないふりをしても、コールバック地獄から逃れることはできません。

Promise を巧みに使用して回避する方法はいくつかありますが、単純なことであれば、これは非常に簡単です。2025 年にジェネレーター/イテレーターがサポートされるまでは。

関数をグローバルな「ajax イベント」ハンドラーとして設定して、fail毎回エラー処理を入力する必要がないようにすることができます。

于 2013-10-08T22:36:22.197 に答える