使用Promise.all在其他函数之后执行函数

时间:2017-09-04 12:35:10

标签: javascript promise

一旦完成所有以前的功能,我就会尝试执行我的函数HideEmptyTile。

到目前为止我一直在使用TimeOut,但这并不是我想要完成的正确方法。

这是我以前的代码:

        retrieveAccountOpenWithVisitObjectif(userId, processOpenWithVisitObjectif);
        retrieveAccountOpen(userId, processAccountOpen);
        retrieveAllActivitiesOpen(userId, processAllActivitiesOpen);
        setTimeout("HideEmptyTile()", 800); 

经过一些研究后我发现我可以使用其他回调函数,但似乎Promise.all已经为我的案例构建了。所以我做了下一个代码:

Promise.all(
        retrieveAccountOpenWithVisitObjectif(userId, processOpenWithVisitObjectif),
        retrieveAccountOpen(userId, processAccountOpen),
        retrieveAllActivitiesOpen(userId, processAllActivitiesOpen)).then(HideEmptyTile()); 

问题在于,这不是我想要的行为,因为在其他函数之后没有执行函数HideEmptyTile。

我是否以错误的方式使用Promise.all?

3 个答案:

答案 0 :(得分:5)

  • Promise.all接受一系列承诺,而不是多个参数
  • then接受一个函数(你已经调用它并传递结果)

Promise.all([
    retrieveAccountOpenWithVisitObjectif(userId, processOpenWithVisitObjectif),
    retrieveAccountOpen(userId, processAccountOpen),
    retrieveAllActivitiesOpen(userId, processAllActivitiesOpen)
]).then(HideEmptyTile);

答案 1 :(得分:1)

确保所有功能都返回承诺,然后您将通过以下方式实现目标:

var promises = [
    retrieveAccountOpenWithVisitObjectif(userId, processOpenWithVisitObjectif),
    retrieveAccountOpen(userId, processAccountOpen),
    retrieveAllActivitiesOpen(userId, processAllActivitiesOpen)
];

Promise.all(promises).then(() => HideEmptyTitle());

答案 2 :(得分:0)

  1. Promise.all采用数组来履行承诺。
  2. 您正在HideEmptyTile()区块中传递then。你需要传入callBack:
  3. 
    
    Promise.all([
            retrieveAccountOpenWithVisitObjectif(userId, processOpenWithVisitObjectif),
            retrieveAccountOpen(userId, processAccountOpen),
            retrieveAllActivitiesOpen(userId, processAllActivitiesOpen)]).then(function(){
              HideEmptyTile();
            });