首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未解析promise的睡眠函数传入其中

未解析promise的睡眠函数传入其中
EN

Stack Overflow用户
提问于 2017-06-11 12:01:42
回答 1查看 521关注 0票数 1

我想出了下面的睡眠功能,我正在努力完善:

代码语言:javascript
复制
const sleep = (promise, milliseconds) => {
  return new Promise(function(resolve, reject) {
    try {
      setTimeout(() => {
        resolve(promise)
      }, milliseconds)
    }
    catch(err) {
      reject(err)
    }
  })
}

下面是一个使用它的示例:

代码语言:javascript
复制
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(),然后再次返回包装在承诺中的结果

代码语言:javascript
复制
const sleep = (promise, milliseconds) => {
  return new Promise((resolve) => {
      setTimeout(() => {
        resolve(promise)
      }, milliseconds)
  })
}

基本上,我认为我的函数只是接收一个promise,然后在x milliseconds..kinda之后将其传递回来,就像体育中的切换:)...give和go

EN

回答 1

Stack Overflow用户

发布于 2017-06-11 12:15:09

为什么promise是一个论点?此函数应创建一个promise。

为什么会有try-catch呢?它不会失败的。

你所需要的就是:

代码语言:javascript
复制
const sleep = milliseconds => 
   new Promise(resolve => setTimeout(resolve, milliseconds));

编辑:请记住,promises不接受回调,您也不必在尝试中手动包装它。您可以使用.then().catch()来编写promises。行动中有个临时执行人员他想把它和睡眠结合起来。这些可能性包括

代码语言:javascript
复制
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秒,然后运行该命令,等待它完成,并打印"Done“。

或者,您可以

代码语言:javascript
复制
cmdPromise
  .then(() => sleep(2000))
  .then(() => console.log('Done'))
  .catch(e => console.log('Error: " + e));

它等待命令执行,然后再等待两秒钟,并打印"Done“。

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

代码语言:javascript
复制
Promise.all([ cmdPromise,
              sleep(2000) ])
  .then(() => console.log('Done')
  .catch(e => console.log('Error: " + e));

这会等待命令完成,并在打印“完成”之前等待两秒钟(并行)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44480241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档