2017-05-20 26 views
0

NodeJSとJavaScriptでは比較的新しいですが、プログラミングではありません。NodeJSプロミス、遅延戻り値

2つのSSHコマンドがSSH2経由で実行され、シェル内のコマンドの出力が解析された後、オブジェクトの配列を返すようになりました。私は様々なPromiseと私がオンラインで見つけた例を試したが、役に立たない。コマンドが実行されるのを待たずに空の配列を返すように見えます。私は、サンプルや正しい方向のポイントを探しています。

return Promise.resolve().then(function() { 
    devicesAndScenes = []; 
    executeCommand(JSON.stringify(getDeviceJson)); 
    executeCommand(JSON.stringify(getSceneJson)); 
}).then(sleep(2000)).then(function() { 
    return devicesAndScenes; 
}); 

function sleep(time) { 
    return new Promise(resolve => { 
    setTimeout(resolve, time) 
    }) 
} 
+0

あなたのコードを投稿してください。ここ –

+0

関数厥が リターンPromise.resolveを()が呼び出され .then(関数(){ devicesAndScenes = []; executeCommand(JSON.stringify(getDeviceJson)); executeCommand(JSON.stringify(getSceneJson))。 })。次に(sleep(2000)) .then(function(){ return devicesAndScenes; }); – bhawkins

+0

とスリープ機能 機能スリープ(時間){ 返す新しい約束(決意=> { のsetTimeout(解決、時間) }) }の代わりに '睡眠(2000)'希望 '()=>睡眠の – bhawkins

答えて

2

問題は約束を返していない第2 .thensleep()機能付1)、したがって、それは最後の.then

return Promise.resolve() 
.then(() => { 
    /* ... */ 
}) 
.then(() => { 
    /* your problem was here, if we add a return it should work properly */ 
    return sleep(2000) 
}) 
.then(() => { 
    /* now this wil be executed after the 2000s sleep finishes */ 
}); 
を実行する前に指定 timeを待って瞬時にしていない 解決するということです

*矢印機能でブラケット構文を使用すると、少し明確になります。

関連する問題