从外部函数获取 Alfresco.util.Ajax.request response.json 数据

get Alfresco.util.Ajax.request response.json data from external function

我有一个 alfresco webscript return json 响应。

我有一个 js 函数 getWorkflowRepositoryContent(),它调用此 webscript 并在响应中重新调整数据。

我将 response.json 存储在数组 list 中。

对我来说一切正常,但是当我从另一个 js 函数调用 getWorkflowRepositoryContent() 时,它 return 编辑了一个空数组,而它必须 return 一个包含从网页脚本 response.

有一个函数,其中我 return 从 webscript 接收到的数据。

你能告诉我我犯了什么错误吗,或者告诉我如何正确地 return 来自那个函数的数据。

function getWorkflowRepositoryContent(){
    var list=[];
    var workflowFilesNameAndNodeRef;

    var test=function getWorkflowFilesList(response)
    {
       workflowFilesNameAndNodeRef=response.json.nodes;
       $.each(response.json.nodes,function(index,value){
           list.push(value.name); 
       });

    }

    Alfresco.util.Ajax.request(
     {
        method:Alfresco.util.Ajax.GET, 
        url: Alfresco.constants.PROXY_URI + "/ALFRESCO-DIRECTORY",
        successCallback:
        {
           fn:test,
             scope:this
        },
        failureCallback:
        {
           fn: function(response)
           {
               Alfresco.util.PopupManager.displayMessage({text:"Failure"});
            },
           scope: this
        }
     });
    console.log(list.length);
   return list;
}  

您的 getWorkflowRepositoryContent 正在获取异步数据但同步返回,因此您的示例将无法运行。

一种简单的方法是使用回调参数简单地调用您的函数。

function getWorkflowRepositoryContent(cb){ // pass a callback as an argument
    var list=[];
    var workflowFilesNameAndNodeRef;

    var test=function getWorkflowFilesList(response)
    {
        workflowFilesNameAndNodeRef=response.json.nodes;
       console.log(response.json.nodes);
       $.each(response.json.nodes,function(index,value){
           list.push(value.name); 
       });


        $.each(list,function(index, fileName){
            $('<option/>').val(fileName).html(fileName).appendTo('#saveButton');
            $('<option/>').val(fileName).html(fileName).appendTo('#loadButton');
         });
         cb(list); // call the callback once the work is done
    }

    Alfresco.util.Ajax.request(
     {
        method:Alfresco.util.Ajax.GET, 
        url: Alfresco.constants.PROXY_URI + "/ALFRESCO-DIRECTORY",
        successCallback:
        {
           fn:test,
             scope:this
        },
        failureCallback:
        {
           fn: function(response)
           {
               Alfresco.util.PopupManager.displayMessage({text:"Failure To get StarXpert Workflow content"});
            },
           scope: this
        }
     });
}  

getWorkflowRepositoryContent( function(list) {

    console.log(list);
});

您也可以使用 promises,但如果您不熟悉它们,可能会有点困难。