7

関数呼び出しからの戻り値をトレースしようとしています:

$('#button').on('click', function(){
   console.log( getMessage(3) ); // I'm trying to get this to "hang" until ajax-related stuff is finished below
});

以下ajaxFetch()は、予想される ajax 遅延オブジェクトを返す一般的な ajax ハンドラーです。それが文字列値であると仮定しましょう: 'hello'. サーバーの応答は数秒です。

function getMessage(id){
   ajaxFetch(id).done(function(result){
      // ... more stuff happening, but not relevant
   }).then(function(result){
      return (result); // I thought this would return to the click handler
   });
}

トレースを出力するにはどうすればよい'hello'ですか?

おもう...

...console.log()どうにかして設定する必要がありますが、 jQueryのドキュメントpromiseを理解するのに本当に苦労しています。

4

2 に答える 2

4

promise インターフェイスとコード ロジックを返します。

 $('#button').on('click', function(){
        $.when(getMessage(3)).then(function(result){console.log(result)});
    });

function getMessage(id){
   return ajaxFetch(id).done(function(result){
      // ... more stuff happening, but not relevant
   }).then(function(result){
      return result; //needed, otherwise it will return the object, not the result
   });
}
于 2013-07-17T22:08:55.707 に答える
3

何をしようとしているのか完全にはわかりませんが、クリック ハンドラーのコンテキスト内で遅延オブジェクトを使用してコールバックを実行する場合は、getMessage から ajax 関数自体を返すことができます。次のようなことを試してください: (未テスト)

$('#button').on('click', function(){
    getMessage(3).then(function(result) {
        // do success callback here
        console.log(result); // 'hello'
    }, function(result) {
        // do fail callback here
    });
});

function getMessage(id){
    return ajaxFetch(id);
};
于 2013-07-17T22:19:43.323 に答える