我想出了下面的睡眠功能,我正在努力完善:
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(),然后再次返回包装在承诺中的结果
const sleep = (promise, milliseconds) => {
return new Promise((resolve) => {
setTimeout(() => {
resolve(promise)
}, milliseconds)
})
}基本上,我认为我的函数只是接收一个promise,然后在x milliseconds..kinda之后将其传递回来,就像体育中的切换:)...give和go
发布于 2017-06-11 12:15:09
为什么promise是一个论点?此函数应创建一个promise。
为什么会有try-catch呢?它不会失败的。
你所需要的就是:
const sleep = milliseconds =>
new Promise(resolve => setTimeout(resolve, milliseconds));编辑:请记住,promises不接受回调,您也不必在尝试中手动包装它。您可以使用.then()和.catch()来编写promises。行动中有个临时执行人员他想把它和睡眠结合起来。这些可能性包括
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“。
或者,您可以
cmdPromise
.then(() => sleep(2000))
.then(() => console.log('Done'))
.catch(e => console.log('Error: " + e));它等待命令执行,然后再等待两秒钟,并打印"Done“。
或者,我猜这就是你想要的:
Promise.all([ cmdPromise,
sleep(2000) ])
.then(() => console.log('Done')
.catch(e => console.log('Error: " + e));这会等待命令完成,并在打印“完成”之前等待两秒钟(并行)。
https://stackoverflow.com/questions/44480241
复制相似问题