Javascript 为要执行的两个函数中的最后一个执行一个onComplete回调

Javascript 为要执行的两个函数中的最后一个执行一个onComplete回调,javascript,function,asynchronous,callback,Javascript,Function,Asynchronous,Callback,我有两个同时运行的函数,我希望在最后一个函数完成时只执行一次回调 function gotoPage () { //only call this once for the last one } app.update(gotoPage); geolocation.getCurrentPosition(gotoPage); 我意识到我可以为顺序执行嵌套它们,但出于性能原因,我不希望这样做。 有没有一个简单的技巧可以有效地做到这一点?快速技巧是使用一个变量来计算完成了多少个函数 var i =

我有两个同时运行的函数,我希望在最后一个函数完成时只执行一次回调

function gotoPage () {
  //only call this once for the last one
}
app.update(gotoPage);
geolocation.getCurrentPosition(gotoPage);
我意识到我可以为顺序执行嵌套它们,但出于性能原因,我不希望这样做。
有没有一个简单的技巧可以有效地做到这一点?

快速技巧是使用一个变量来计算完成了多少个函数

var i = 0;

function gotoPage () {
   i++;

   if(i == requiredNumber) {
      // execute stuff

   } else { // some is pending }

  //only call this once for the last one
}
app.update(gotoPage);
geolocation.getCurrentPosition(gotoPage);

快速技巧是使用一个变量来计算完成了多少个函数

var i = 0;

function gotoPage () {
   i++;

   if(i == requiredNumber) {
      // execute stuff

   } else { // some is pending }

  //only call this once for the last one
}
app.update(gotoPage);
geolocation.getCurrentPosition(gotoPage);
用承诺解决:

Promise.all([
    new Promise(resolve => app.update(resolve)),
    new Promise(resolve => geolocation.getCurrentPosition(resolve)),
]).then(() => gotoPage());
您可以在此处阅读有关承诺的内容:

用承诺解决:

Promise.all([
    new Promise(resolve => app.update(resolve)),
    new Promise(resolve => geolocation.getCurrentPosition(resolve)),
]).then(() => gotoPage());
您可以在此处阅读有关承诺的内容:


你为什么不用承诺来代替?我没看过我没看过我没看过我没看过我没看过我没看过我没看过我没看过我没看过我没看过我没看过我没看过我没看过我没看过我没看过我没看过我没看过我没看过我没看过我没看过我没看过我没看过我没看过我没看过我没看过我没看过我没看过我没看过我没看过我没看过我没看过你没看过我没看过我没看过我没看过我没看过我没看过我没看过我没。这只是一个让事情顺利进行的快速肮脏伎俩。你能举个例子说明如何通过promise实现这一点吗?由于目标浏览器较旧,我可能会使用类似的方法。为什么要让事情复杂化,而他可以使用promise以干净的方式实现他的最终目标?promise肯定很棒(对于正确理解的人)。这只是一个让事情顺利进行的快速肮脏技巧。你能举个例子说明如何通过promise实现这一点吗?由于目标浏览器较旧,我可能会使用类似的方法。我正在为Cordova应用程序编写,目标可能是ES6之前的移动浏览器。这会降低性能吗?如果你使用MDN并查看打开Promise类的引用,然后您可以看到确切的浏览器兼容性;您也可以检查。从Edge开始,AFAIK promises受到了很好的支持;但在IE中不受支持。您可以检查旧浏览器是否存在polyfills。这似乎是最好的答案,但我没有在问题中指定我的目标浏览器是old所以我实际上不能使用这个。谢谢你,很高兴知道。我正在为Cordova应用程序编写,目标是潜在的ES6之前的移动浏览器。这会有什么影响?如果你在MDN上查找Promise类的引用,那么你可以看到确切的浏览器兼容性;你也可以检查。AFAIK promises非常受支持,from Edge Forwards;不在IE中。您可以检查旧浏览器是否存在多边形填充。这似乎是最好的答案,但我没有在问题中指定我的目标浏览器是旧的,因此我实际上无法使用它。谢谢您,很高兴知道。