繁体   English   中英

睡眠功能无法解决传递给它的承诺

[英]Sleep function not resolving promise passed into it

我提出了以下睡眠功能,我正在努力完善:

const sleep = (promise, milliseconds) => {
  return new Promise(function(resolve, reject) {
    try {
      setTimeout(() => {
        resolve(promise)
      }, milliseconds)
    }
    catch(err) {
      reject(err)
    }
  })
}

以下是使用它的示例:

let { error, stdout, stderr } = await sleep(exec(`aws s3api head-bucket --bucket pr-${bucketName}`), 2000)

我遇到的问题是我有时会得到错误(并不总是): UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: Command failed: aws s3api head-bucket --bucket pr-11

我不太确定如何使我的睡眠功能起作用。 我想我只是传递了promise(在这种情况下我正在传递promisified exec()调用),对它执行超时,并在超时解析后将其作为新的promise返回。

这实际上对我有用,它只是给了我那个错误,但它肯定是有效的,我打算解决传递的promisified exec(),然后再次将其结果包含在一个promise中

const sleep = (promise, milliseconds) => {
  return new Promise((resolve) => {
      setTimeout(() => {
        resolve(promise)
      }, milliseconds)
  })
}

基本上我认为我的功能正在做的只是接受一个承诺,然后在x毫秒之后将其传回去...像运动中的切换一样:)...给予和去

为什么承诺是一个论点? 这个函数应该创造一个承诺。

为什么会有尝试? 它不能失败。

你需要的只是这个:

const sleep = milliseconds => 
   new Promise(resolve => setTimeout(resolve, milliseconds));

编辑:记住,promises不接受回调,你不必手动包装它。 您使用.catch() .then().catch()来组成promise。 OP有一位有保证的执行官,他想把它与睡眠结合起来。 可能性是

const cmdPromise = util.promisify(require('child_process').exec)(cmd)
  .then(() => sleep(2000))
  .then(cmdPromise)
  .then(() => console.log('Done'))
  .catch(e => console.log('Error: " + e));

等待2秒,然后运行命令,等待它完成,并打印“完成”。

或者,你可以

cmdPromise
  .then(() => sleep(2000))
  .then(() => console.log('Done'))
  .catch(e => console.log('Error: " + e));

等待命令执行,然后等待两秒钟,并打印“完成”。

或者,我猜这是你想要的:

Promise.all([ cmdPromise,
              sleep(2000) ])
  .then(() => console.log('Done')
  .catch(e => console.log('Error: " + e));

这个等待两个命令完成和两秒印刷“完成”之前流逝(并行)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM