我有两个简单的函数:一个返回promise
function showBootbox(){
return new Promise(function (resolve, reject) {
bootbox.confirm('Are you sure ? ',resolve);
});
}
以及使用callback
。
function getBootboxValue(callback) {
showBootbox().then(function (result) {
callback(result);
});
}
现在的问题是我无法等待回调完成。
if(condition){
getBootboxValue(function(result){
if(result){
//code
}
});
}
console.log('a');
在获得promise的结果之前, console.log(a)
正在执行。如何在不使用async/await
机制的情况下执行此操作?
提前致谢!
答案 0 :(得分:2)
如果我没有弄错,那么如果条件不满足,你的想法是console.log('a')
,如果条件满足,你的想法是在回调结束时console.log('a')
。
如果是这样,一个选项可能是在条件满足时返回getBootboxValue(callback)
的承诺,如果条件不满足则返回已履行的承诺。然后,您将使用包含console.log('a')
的承诺的回调。
function showBootbox() {
return new Promise(function(resolve, reject) {
console.log('Are you sure ? ');
resolve();
});
}
function getBootboxValue(callback) {
return showBootbox().then(function(result) {
callback(result);
});
}
function test(condition) {
var cbk = function(result) {
console.log('Launching callback');
if (result) {
//code
}
},
aux = condition ? getBootboxValue(cbk) : Promise.resolve(null);
aux.then(function() {
console.log('a')
});
}
test(true);
test(false);
希望它有所帮助。
答案 1 :(得分:1)
我认为这就是你所追求的。如果您需要有条件地执行异步函数然后运行一些代码,那么无论如何都要运行该代码,您可以将代码放在函数中并在任何一种情况下调用它:
if(condition){
getBootboxValue(function(result){
if(result){
//code
}
doSomething();
});
} else {
doSomething();
}
function doSomething() {
console.log('a');
}