我可以让异步javascript方法与异步瀑布同步运行吗?

我可以让异步javascript方法与异步瀑布同步运行吗?,javascript,asynchronous,Javascript,Asynchronous,我的JavaScript应用程序中有三个函数调用,第二个是异步的,所以看起来像这样 function runner() { function1(); function2(); //This is the one that is asynchronous function3(); } 这会导致函数3在函数2之前完成的问题,从而导致我的应用程序出现问题。到目前为止,我的应用程序是纯javascript的,但我正在寻找一种健壮的方法来确保我的函数按顺序运行,而不必进入回调地狱

我的JavaScript应用程序中有三个函数调用,第二个是异步的,所以看起来像这样

function runner() {
    function1();
    function2(); //This is the one that is asynchronous
    function3();
}

这会导致函数3在函数2之前完成的问题,从而导致我的应用程序出现问题。到目前为止,我的应用程序是纯javascript的,但我正在寻找一种健壮的方法来确保我的函数按顺序运行,而不必进入回调地狱。我想我可能会选择我们,但我不是在我的应用程序上运行node,我只是在浏览器中。欢迎提出任何意见

如果您绝对无法修改函数以利用承诺或接受回调,一种解决方案是使用
间隔检查
function2
是否完成。当然不是最好的方法,但类似的方法会奏效

我认为这比地狱还要糟糕

var waitFor = function(test, success) {
  var iv = setInterval(function() { 
  if (test()) { 
    clearInterval(iv); 
    success();
  }, 500);
}

var isFunction2Done = function() {
  //some logic here, true if done, false otherwise
}

function1();
function2();
waitFor(isFunction2Done, function3);

如果你的
function2
既不接受回调也不返回承诺对象,那么你就无能为力了。他可以通过无限循环锁定浏览器,等待
function2
的副作用。但我也建议你做出承诺。不,他不能。因为这个副作用必须由并行进程触发,因为js是单线程的,所以无法运行。无限循环只会杀死页面。标题中提到的“异步瀑布”是什么?我在问题中看不到这一点。@NickP您运行的环境是什么?浏览器还是Node.js?