如何让函数调用等到另一个完成

Posted

技术标签:

【中文标题】如何让函数调用等到另一个完成【英文标题】:How to get a function call to wait till another one is finished 【发布时间】:2016-09-20 19:30:48 【问题描述】:

所以我想要的是,

functionA(); // this completes 
functionB(); // then this runs

我试图一次将多个集合播种到数据库中,当我按程序将每个集合一个接一个地放置时,只有最后一个被播种到数据库中。我正在试图弄清楚如何让 javascript 不异步,所以我可以让每一步都等到前一步完成。我觉得我可以使用下划线“延迟”方法,该方法延迟调用函数,直到当前调用堆栈被清除;我只是不知道如何使用它。

我正在使用下划线延迟方法,这很有效,但它取决于种子大小,我想摆脱这种情况。

代码如下所示:

// creates and sends seed data to a collecion("blah") inside a db("heroes")
var blog = MeanSeed.init("heroes", "blah");
blog.exportToDB();

// this waits a second till it starts seeding the "heroes" DB with its "aliens" collection
_.delay(function() 
  var user = MeanSeed.init("heroes", "aliens");   
  user.exportToDB();  
, 1000)

【问题讨论】:

【参考方案1】:

我可以推荐使用Promises。它是相当新的,它是在 ES6 中引入的(但它已经在 Node 5-6 中)。使用示例:

new Promise(function(resolve, reject)
    // do something in A
    resolve();
).then(function(result) 
    // do something else in B
    return result;
)

【讨论】:

【参考方案2】:

你可以使用回调函数,像这样:

function functionA(done)
    //do some stuff
    done(true);

function functionB()



functionA(function(success)
    if(success)
        functionB();
);

或者,您可以使用承诺。

【讨论】:

感谢您的建议,回调是一种思维扭曲,但它们很酷

以上是关于如何让函数调用等到另一个完成的主要内容,如果未能解决你的问题,请参考以下文章

如何让语句等到前一个函数完成?

如何等到异步任务中另一个类的方法在android中完成

如何让一个方法等到另一个方法完成它在Objective C中工作?

如何让游戏等到调用函数?

等到三个 ajax 调用解决触发函数(延迟?)

如何等到回调被调用