NodeJS承诺,延迟返回值

时间:2017-05-20 02:28:30

标签: javascript node.js promise bluebird

我对NodeJS和JavaScript相对较新,但不是编程。

我希望在通过SSH2执行两个SSH命令后返回一个对象数组,并且已经解析了shell中命令的输出。我尝试了各种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)
  })
}

1 个答案:

答案 0 :(得分:2)

问题是第二个.then(具有sleep()功能的那个)没有返回承诺,因此它立即解决而不是等待执行最后time

之前指定的.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 */
});

*在箭头函数中使用括号语法使它们更清晰。