2017-04-14 13 views
-2

ここで何かを見落としていると思いますが、同期値を返す関数を記述しようとしていますが、内部的には同期で返す必要のある関数で非同期の値を使用する方法

// Gets something asynchronously 
const getValueAsync = Promise.resolve('value') 

// Needs to return a value synchronously 
const returnSyncValue =() => { 
    // Needs the async data here 
    getValueAsync 

    // Modify it 


    // Return the result sync 
} 

// So that this will work: 
const value = returnSyncValue() 

私はノードの最新バージョンを使用しています。 returnSyncValueの実装を変更せずにこれを達成する方法はありますか(つまり、非同期にすること)?

+1

非同期を同期にすることは不可能です。なぜ分秒でそれを考える必要がありますか? –

+1

http://stackoverflow.com/questions/14220321/how-do-i-return-the-response -from-an-asynchronous-call – dm03514

+1

非同期性はウイルス性です。一度非同期機能を使用すると、他のすべてが非同期でなければなりません。 – robertklep

答えて

0

短い答え:いいえ

長い答え:

あなたがconst value = returnSyncValue()を行うとき、あなたはまだ非同期値を得ていないので、あなたがこれを行うことはできません。したがって、割り当てる価値はありません。

0

使用await

// Gets something asynchronously 
const getValueAsync = Promise.resolve('value') 

// Needs to return a value synchronously 
const returnSyncValue =() => { 
    // Needs the async data here 
    var result = await getValueAsync() 

    // Modify it 
    result = "newData" 

    // Return the result sync 
    return result 
} 

// So that this will work: 
const value = returnSyncValue() 

注:node.jsが7以上必要です。

0

短い回答、いいえ。

長い答えでは、ほとんどのインターフェイスはPromiseを戻り値として受け入れます。 JavaScriptでは、他のすべてのものをハングアップするので、ブロックすることはできません。適切に実装されたライブラリは、コールバックまたはPromiseとして値を受け入れ、それを連鎖させます。

独自の実装の場合は、Promiseのチェーンを改善することを検討してください。

関連する問題