gpt4 book ai didi

javascript - 如何在 promise 之间等待

转载 作者:搜寻专家 更新时间:2023-10-31 23:32:37 26 4
gpt4 key购买 nike

我有一个在执行之前返回的命令,所以我想在遵循 promise 链之前稍等片刻。这样做有什么最佳做法吗?

 new Promise(function (resolve, reject) {
exec('netbeast new test-app', function (err, stdout, stderr) {
if (err) return reject(err)
else return resolve(PATH_TO_APP)
})
})
.then(fs.readdirAsync)
.then(fs.readFileAsync.bind(fs, PATH_TO_APP + '/server.js'))
.then(function (data) {
var shebang = data.toString().slice(0, data.toString().indexOf('\n'))
shebang.should.equal('#!/usr/bin/env node')
return Promise.resolve()
})
.then(fs.readJsonAsync.bind(fs, PATH_TO_APP + '/package.json'))
.then(function (data) {
return fs.accessAsync(PATH_TO_APP + '/' + data.main, fs.X_OK)
})
.then(done)

最佳答案

I have a command that returns before fulfilling

如果该操作与您可以监控并知道何时完成的 promise 无关,这听起来像是一个设计错误。您应该修复您的操作,以便在异步操作实际完成之前它不会完成。您没有确切解释您的问题出在哪里,但如果您这样做了,我们可能会帮助您解决真正的问题,而不是拖延时间。

如果这是多个 promise 之间的协调问题,那么您可能只需要确保各种异步操作适本地链接在一起,以便等待前一个操作,或者通过从 .then() 中返回一个 promise 处理程序,从允许调用者等待完成的函数返回一个 promise ,或者适本地将操作与连续的 .then() 处理程序链接起来。


如果您确实需要插入延迟,看起来您正在使用包含内置延迟机制的 Bluebird。在给定的 promise p 上,您可以使用 .delay(n) 方法:

p.delay(100).then(...)   // wait 100ms before allowing promise chain to proceed

或者,在 .then() 处理程序中,您可以返回 Promise.delay(n),如下所示:

p.then(function(data) {
...
return Promise.delay(100); // wait 100ms before allowing promise chain to proceed
})

关于javascript - 如何在 promise 之间等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37593833/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com