如何在回调结束时获得通知承诺所有回调样式[重复]

Posted

技术标签:

【中文标题】如何在回调结束时获得通知承诺所有回调样式[重复]【英文标题】:how to get notified at the end of callbacks Promise all callback style [duplicate] 【发布时间】:2019-11-19 08:31:39 【问题描述】:

我有一个接受回调的异步函数

function doAsync(delay, cb) 
  setTimeout(() => 
    console.log('async ', delay);
    cb();
  , delay);

我想多次调用这个函数,并在所有回调完成时收到通知。

// I have to call `doAsync` for each element of this array
var a = [100,300,200,400];

a.forEach(_ => doAsync(_, () => ));

function onEnd() 
 console.log('all done');


// expected output
//
// async 100
// async 200
// async 300
// async 400
// all done

【问题讨论】:

a) 切换到 Promise,它们好多了! b) 使用 async.js 库,它具有异步迭代的辅助函数 【参考方案1】:

您需要通过并检查最后一个indexarray's length。我已在您的代码中添加了该实现。

希望对您有所帮助!

function doAsync(delay, cb, key) 
  if ((key + 1) == a.length) 
    onEnd();
  
  setTimeout(() => 
    console.log('async ', delay);
    cb();
  , delay);


// I have to call `doAsync` for each element of this array
var a = [100,200,400,300];

a.forEach(function(_,k)doAsync(_, () => ,k));

function onEnd() 
 console.log('all done');

【讨论】:

如果最后一项不是最长的就不行,比如var a = [300, 200, 100]; 你检查了吗?它对我来说很好......

以上是关于如何在回调结束时获得通知承诺所有回调样式[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何隐瞒回调的承诺? [重复]

如何创建从回调函数返回承诺的函数[重复]

如何将我的代码从回调函数更改为承诺 [重复]

一个通知的多个回调 Pushsharp

CocosCreator-如何处理Animation动画的结束回调

异步 JavaScript - 回调与延迟/承诺 [重复]