2016-05-26 11 views
0

注:このシナリオの記述方法が完全に間違っている場合、httpリクエストでjavascript関数のコールバックを正しく使用する方法

私は2つのjavascriptファイルを持っています。私は最初のファイル(クライアント側)の関数を呼び出して、2番目のファイルの関数を呼び出し、2番目のファイルの関数のコールバックを最初のファイルのresponse.success/.errorの目的で使用しています。

それはここでは意味がない場合は、いくつかのコードは次のとおりです。

注:これは解析のクラウド機能を使用して一時的に行われています。それが重要かどうかはっきりしない情報が必要な場合はお知らせください。

まずファイル:

Parse.Cloud.define("methodName", function(request, response) { 
    ... 
    secondFile.myFunction(param1, { 
     stuff: request.params.stuff, 
    }, function (err, res) { 
     if (err) { 
      response.error(err); 
     } else { 
      response.success(res);// I'm assuming this is going to the hardcoded "yes." from httpRequest on second file's function 
     } 
    }); 
}); 

セカンドファイル:私のクライアントで

myFunction: function(param1, properties, callback) { 
     if (!param1) return callback(new Error("Helpful error message")); 

     var headersForReq = { 
      ... 
     }; 

     var bodyForReq = ...; // the properties properly parsed 


     Parse.Cloud.httpRequest({ 
      method: 'PUT', 
      url: ..., 
      headers: headersForReq, 
      body: bodyForReq, 
      success: function (httpResponse) { 
       callback(null, 'yes'); // the hardcoded "yes" i referred to 
      }, 
      error: function (httpResponse) { 
       callback(httpResponse.status + httpResponse.error); 
      } 
     }); 
    } 

、コードは成功として処理(エラーがスローされたか、戻されていない)が、私は印刷するときされますそれは(はい)ではなく、(null)として渡る価値を出す。

ここでは何が起こっていますか? (サイドノート、httpRequestは現在何もしていません。サードパーティのAPIに送信されているため、要求が適切に送信されているかどうかを確認するのは難しいです)。

2番目のファイルのメソッドが正しく呼び出されていることはわかります。だから、私はあなただけだと思う​​module.exportsまたは​​

+1

どのように正確に値を「プリントアウト」しますか?クライアント上の – Pointy

+0

このParse "PFCloud"関数を呼び出しています。それはオブジェクト(あなたが最初の関数のresponse.successに入れたもの)を返します。エラーがあればエラーを返します。たとえば、最初のメソッドで 'response.success( 'yes')'を 'response.success(res)'の代わりにハードコードすると、クライアント上のコンソールは返されたオブジェクトとして 'yes'を出力します – gadu

+0

クライアントでは、応答値が表示されたり、例外が発生したりする – ChunTingLin

答えて

0

と愚かな問題ではありませんたとえばスタイルでAPIにそれ書き換え

を誤使用しています。 https://parse.com/docs/js/api/classes/Parse.Cloud.html#methods_httpRequest

Parse.Cloud.httpRequest({ 
     method: 'PUT', 
     url: ..., 
     headers: headersForReq, 
     body: bodyForReq 
    }).then(function (httpResponse) { 
      callback(null, 'yes'); // the hardcoded "yes" i referred to 
     }, 
     function (httpResponse) { 
      callback(httpResponse.status + httpResponse.error); 
     } 
    }); 

私も、動作します以下だと思います。あなたは、オープンソースの構文解析サーバーを使用している場合

Parse.Cloud.httpRequest({ 
     method: 'PUT', 
     url: ..., 
     headers: headersForReq, 
     body: bodyForReq 
    }, { 
     success: function (httpResponse) { 
      callback(null, 'yes'); // the hardcoded "yes" i referred to 
     }, 
     error: function (httpResponse) { 
      callback(httpResponse.status + httpResponse.error); 
     } 
    }); 

ところで、あなたは要求または要求の約束を使用することができます。これらの2 npmパッケージは多くの人が使用しています。 (Parse.Promiseはes6のような約束ではありません)

関連する問題