我有一个在执行之前返回的命令,所以我想在遵循 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/