2016-07-19 3 views
0

私はAJAX要求を出していますが、私は約束応答を処理することに問題があります。この例では、AJAX要求は図示されていないが、 'requestOriginalDataFromAjax()'と呼ばれる機能の内部で行われます。promise.success関数からデータオブジェクトを返す

「約束」形式では、使用できず、promise.success機能を持つ通常のデータオブジェクトに変換する必要があります。しかし、promise.success関数のデータを渡すことは、私が問題に遭うところです。返されるデータはいつもundefinedに戻ります。ここで

は一例です:HERE

private convertPromise(){ 

     let requestedData:any = this.requestOriginalDataFromAjax(); 

     let promise:any = requestedData; 

     promise.success(function (data) { 
      console.log("data inside my converter: "); 
      console.log(data); 
      return data; 
     }); 
} 

private needToDoSomethingWithTheDataNow(){ 

     let convertedData:any = this.convertPromise(); 

     console.log("returned data: "); 
     console.log(convertedData); 
} 

は、コンソール出力です:

data inside my converter: 
full_data_object: ["blah":"blah"] 

returned data: 
undefined 

私はこの質問が過去に頼まれましたが、すべて私の研究と読んだ後、私はまだ」することができます知っています前の例に基づいて理解する。

+2

約束の返信文がラムダの内部に返されています。 'convertPromise'関数は何も返さないので、未定義です。 –

+0

@JuanmaSerrano関数の外の変数に値を保存し、その値を返そうとしましたが、まだ定義されていませんでした。構文はどのように見えますか? – jShoop

答えて

1

あなたはconvertPromise機能の約束を返す必要があり、その後、呼び出し側で正しくそれを消費する:

private convertPromise(){ 

    let requestedData:any = this.requestOriginalDataFromAjax(); 

    let promise:any = requestedData; 

    promise.success(function (data) { 
     console.log("data inside my converter: "); 
     console.log(data); 
     return data; 
    }); 

    return promise; 

}

プライベートneedToDoSomethingWithTheDataNow(){

let convertedDataPromise:any = this.convertPromise(); 

    convertedDataPromise.success((function(convertedData) { 
    console.log("returned data: "); 
    console.log(convertedData); 
    }); 

}

+0

しかしこれは冗長です。コンバーターの目的は、約束を通常のデータオブジェクトにしてその形式で渡すことだけです。それは可能ですか? – jShoop

+1

ああ、私は見ない、ない。あなたが約束を扱っているなら、すべてが1つの中になければなりません。それが役に立つならば、約束の中からコールバックを呼び出すことができます。しかし、実際に約束の道を辿ると、すべてが.then/.success/.errorロジックの中に入る必要があります –

+1

おかげですべてが返答します! – jShoop