作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个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/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!