首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >json循环后推送2个数组

json循环后推送2个数组
EN

Stack Overflow用户
提问于 2016-01-26 23:42:19
回答 4查看 58关注 0票数 0

我需要运行函数"testfun 2次“,对于每个函数,我将有几个名称--例如testfun(5,global_user) // output 1,2,4,4,5,以及testfun(7,global_user) // output 9,10,11 --如何在运行两个函数之后将这两个数组放在一个数组中?

代码语言:javascript
复制
testfun(5, global_user);
testfun(7, global_user);

function testfun(groupId, myUser) {
    var selectStr = "Title";
    var itemsUrl = "https://info.com(" + groupId + ")/users" + "?" + selectStr + "&" + orderbyStr;
    var executor = new SP.RequestExecutor;
    executor.executeAsync(
        {
         url: itemsUrl,
         method: "GET",
         headers: { "Accept": "application/json; odata=verbose" },
         success: loadTeamNames,
         error: errorHandler
        }
    );
}

var arr = [];
function loadTeamNames(data){
  var jsonObject = JSON.parse(data.body);
  var results = jsonObject.d.results;
  var hide_groups = false;
  $(results).each(function(){
    var name = $(this)[0].Name; 
  });   
}

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-01-27 00:04:25

由于testFun()使用异步方法,所以不能在运行两次之后立即执行任何操作,而不需要等待两个实例完成。这是通过承诺来完成的。

您可以使用$when()并从testFun()返回一个承诺。需要将loadTeamNames移动到testFun中才能做到这一点

在两个承诺都解决之前,$.when()是不会完成的

代码语言:javascript
复制
function testfun(groupId, myUser) {

    var defer = $.Deferred();

    var selectStr = "Title";
    var itemsUrl = "https://info.com(" + groupId + ")/users" + "?" + selectStr + "&" + orderbyStr;
    var executor = new SP.RequestExecutor;
    executor.executeAsync(
            {
                url : itemsUrl,
                method : "GET",
                headers : {"Accept" : "application/json; odata=verbose"},
                success : loadTeamNames,
                error : errorHandler
            }
    );
    function loadTeamNames(data) {
        var jsonObject = JSON.parse(data.body);
        var results = jsonObject.d.results;
        var hide_groups = false;
        $(results).each(function () {
            var name = $(this)[0].Name;
        });

        // resolve deferred and pass data to be used in `$.when()`
        defer.resolve(results);
    }

    return defer.promise;

}

要使用

代码语言:javascript
复制
$.when(testfun(5, global_user),testfun(7, global_user)).done(function (results1, results2) {

    //do what you need to with arrays results1 & results2

});

defer.reject()中添加errorHandler

票数 0
EN

Stack Overflow用户

发布于 2016-01-26 23:55:02

与JS

代码语言:javascript
复制
var mergedArray = outputOne.concat(outputTwo);

与JQuery

代码语言:javascript
复制
var mergedArray = $.merge( $.merge( [], outputOne), outputTwo);
票数 1
EN

Stack Overflow用户

发布于 2016-01-26 23:54:43

假设jsonObject.d.results已经是一个数组,您可以这样做:

arr.concat(results)

到目前为止,这将使数组与新结果连接起来。在loadTeamNames中包含该代码,testfun的每次运行都会将结果连接到当前数组。但是,不太确定在loadTeamNames中使用这些变量是为了什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35026169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档