gpt4 book ai didi

javascript - 等待 bluebird Promise 内的可选流程操作

转载 作者:行者123 更新时间:2023-12-02 14:45:53 25 4
gpt4 key购买 nike

我有一个bluebird promise ,它运行检查。如果此检查为真,则可以继续进行。但是,如果此检查错误,则需要 spawn一个异步进程,必须等待其完成才能继续。

我有类似以下内容:

var foo = getPromise();

foo.spread( function (error, stdout, stdin) {
if (error) {
// ok, foo needs to hold on until this child exits
var child = spawn(fixerror);
child
.on('error', function (e) {
//I need to error out here
})
.on('close', function (e) {
//I need to have foo continue here
});
} else {
return "bar";
}
});

我该如何去做呢?

最佳答案

首先,为什么您的 .spread() 处理程序采用以 error 作为第一个参数的回调。这似乎不正确。错误应该导致拒绝,而不是实现。

但是,如果这确实是您的代码的工作方式,那么您只需从 .spread() 处理程序中返回一个 promise 。然后,该 promise 将链接到原始 promise ,然后您可以看到两者何时完成:

getPromise().spread( function (error, stdout, stdin) {
if (error) {
// ok, foo needs to hold on until this child exits
return new Promise(function(resolve, reject) {
var child = spawn(fixerror);
child.on('error', function (e) {
//I need to error out here
reject(e);
}).on('close', function (e) {
// plug-in what you want to resolve with here
resolve(...);
});
});
} else {
return "bar";
}
}).then(function(val) {
// value here
}, function(err) {
// error here
});

但是,您的 .spread() 处理程序可能不应该有 error 参数,而这应该会导致原始 promise 的拒绝:

getPromise().spread( function (stdout, stdin) {
// ok, foo needs to hold on until this child exits
return new Promise(function(resolve, reject) {
var child = spawn(fixerror);
child.on('error', function (e) {
//I need to error out here
reject(e);
}).on('close', function (e) {
// plug-in what you want to resolve with here
resolve(...);
});
});
}).then(function(val) {
// value here
}, function(err) {
// error here
});

关于javascript - 等待 bluebird Promise 内的可选流程操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36611136/

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