承诺包裹功能

时间:2017-10-11 18:04:35

标签: javascript promise

好的,所以我几乎得到了承诺。

我正在试图弄清楚如何在view_functions中放置一个promise,以便返回工作。

function loadViewFunctions(view_functions,append_data){

    var this_app_data = [];

    function viewFunctions(){

        for (i = 0; i < view_functions.length; i++) {

            this_app_data[i] = window[view_functions[i]]();

        }
        for (i = 0; i < this_app_data.length; i++) {

            this_app_data[i].then(function(this_d) {

                append_data = append_data + this_d;

            });
        }
        return append_data;
    }

    //return
    return viewFunctions().then(post_app_data => {
        return post_app_data;
    });
};

1 个答案:

答案 0 :(得分:0)

以下代码段应该与我认为您尝试实现的内容相同:

function loadViewFunctions (view_functions, initial_append_data) {
  // retrieve the functions and calls them
  const promises = view_functions.map(f => window[f]());
  return Promise.all(promises).then(
    // join the results together
    results => results.reduce((acc, this_d) => acc + this_d), initial_append_data)
  );
}

使用

  • map迭代数组并创建一个新数组
  • Promise.all要等到你给它的所有承诺都已解决

正如其他人在评论中提到的那样,不要使用函数名来访问全局函数。传递一系列函数。