如何等待回调函数完成?

时间:2017-05-22 07:50:09

标签: javascript function callback promise

我有两个简单的函数:一个返回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机制的情况下执行此操作?

提前致谢!

2 个答案:

答案 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');
}