2017-09-20 8 views
0

ノード・サーバーには、サーバー・レンダリングをすべてクライアントに解決した後、いくつかの約束があります。私が持っているいくつかの約束のすべてのデータを持っているPromise.all([ ...を使用しています。別の呼び出しからデータが得られた後にnodejsサーバーで約束を解決するか?

私の約束が解決される前に、別の電話からのデータが必要になりました。しかし、私が必要なものを得る前に、まだPromise.allが解決しているようです。

const myPromise = new Promise((resolve) => { 
    needDataFromThisCall(someInfo) 
    .then((data) => { 
     return resolve(sortData(data)) 
    }) 
    .catch((error) => { 
     //error handle 
    }) 
}) 
.then((resolvedData) => { 
    return resolvedData; 
}) 

これは、最終的な.then resolvedDataがundefinedであると私は私のsortData機能に入る前に解決を取得すると思われるので、動作するようには思えません。 return resolve(sortData...は、最終値.thenに戻り値を返しませんか?

myPromiseは、そのデータをsortDataに送信する必要があるため、実際にどうすれば解決できますか?

+0

あなたは 'data'がそれに' sortData'を呼び出す前に解決されることを確認しましたか? – Rowland

+0

'Promise.all'と' sortData'のコードをすべて表示します。 – alexmac

+0

@ローランド私は持っています。データはsortDataに送られます。 – Chipe

答えて

1

以下のコードは正常に動作します。 sortDataが同期関数であると仮定すると、結果を得るにはmyPromiseを解決する必要があります。

let someInfo = [2,3,1]; 
 

 
let needDataFromThisCall = info => new Promise(res => setTimeout(()=>res(info), 500)); 
 

 
let sortData = data => data.sort(); 
 

 
const myPromise = new Promise((resolve) => { 
 
    needDataFromThisCall(someInfo) 
 
    .then((data) => { 
 
     return resolve(sortData(data)) 
 
    }) 
 
    .catch((error) => { 
 
     //error handle 
 
    }) 
 
}) 
 
.then((resolvedData) => { 
 
    return resolvedData; 
 
}) 
 

 
myPromise.then(data => console.log('final data', data))

+0

最後の行は不要です、 'console.log( '最終データ'、resolvedData);'最初に 'myPromise .then() ' – vladkras

関連する問題