一旦完成所有以前的功能,我就会尝试执行我的函数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?
答案 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)
Promise.all
采用数组来履行承诺。HideEmptyTile()
区块中传递then
。你需要传入callBack:
Promise.all([
retrieveAccountOpenWithVisitObjectif(userId, processOpenWithVisitObjectif),
retrieveAccountOpen(userId, processAccountOpen),
retrieveAllActivitiesOpen(userId, processAllActivitiesOpen)]).then(function(){
HideEmptyTile();
});