Ibm mobilefirst Worklight在循环中调用WL.Server.invokeHttp(输入)

Ibm mobilefirst Worklight在循环中调用WL.Server.invokeHttp(输入),ibm-mobilefirst,worklight-adapters,Ibm Mobilefirst,Worklight Adapters,我是Worklight的新手。 我正在尝试合并来自多个WL.Server.invokeHttp(输入)的响应 e、 g 现在我正在尝试合并学生列表中每个学生的分数 添加代码: function getStudentsMarks() { path = "/edu/students"; WL.Logger.info("path: "+path); var input = { method : 'get', returnedContentType

我是Worklight的新手。 我正在尝试合并来自多个WL.Server.invokeHttp(输入)的响应

e、 g

现在我正在尝试合并学生列表中每个学生的分数

添加代码:

function getStudentsMarks() {
    path = "/edu/students";
    WL.Logger.info("path: "+path);
    var input = {
        method : 'get',
        returnedContentType : 'json',
        path : path
    };
    var response = WL.Server.invokeHttp(input);
    var students = response.students;
    for (var i = 0; i < students.length; i++) {
        var student = students[i];
        WL.Logger.info("student id: " + student.id);
        resp = getStudentMarks("students/"+student.id);
        students[i].marks = resp;
    }

    return response;
}

function getStudentMarks(path) {
    path = "/edu/"+ path;
    var input = {
        method : 'get',
        returnedContentType : 'json',
        path : path
    };
    var response = WL.Server.invokeHttp(input);

    return response;
}
函数getStudentsMarks(){ path=“/edu/students”; WL.Logger.info(“路径:”+path); 变量输入={ 方法:“get”, returnedContentType:'json', 路径:路径 }; var response=WL.Server.invokeHttp(输入); var students=response.students; for(var i=0;i
提前谢谢。

您的问题有点太宽泛,没有包含任何代码

你试过什么了吗

记住过程代码是用JavaScript编写的,这一点很重要。所以,如果您知道如何在JavaScript中实现它,那么您也应该能够在过程代码中实现它

据我所知,您应该做的是创建一个适配器过程。此过程将对不同的HTTP后端请求进行不同的调用。在JavaScript中,编写所需的任何合并逻辑。在循环结束时,返回所需的已处理数据

在深入研究您的示例之前,可以尝试只调用1次,然后尝试合并2次。一旦您对编写代码感到满意,请尝试您的解决方案

但是请注意,一个HTTP适配器只能连接到一个后端域名。因此,如果您的示例需要多个域名,那么您的“mashup”适配器需要调用其他适配器。 如果所有HTTP请求都指向相同的域名,那么一个适配器就足够了


我建议您也阅读以下内容:

添加了代码。请建议这是否是正确的方法。这个想法似乎是正确的,但需要用数据进行测试-你试过了吗?有错误吗?预期结果?但您的过程当前在结尾处返回“响应”。我想你想要“学生”?我试过了,但最终的回答花了很长时间。我还担心任何服务调用是否失败。是的,我需要收集所有学生的数据,然后发送单个响应。如果您的循环调用外部服务数百次,我想它会太长而失败。例如,用3名学生的较短列表进行检查。同样如前所述,getStudentsMark的最后一行应该是“学生”而不是“回应”。
function getStudentsMarks() {
    path = "/edu/students";
    WL.Logger.info("path: "+path);
    var input = {
        method : 'get',
        returnedContentType : 'json',
        path : path
    };
    var response = WL.Server.invokeHttp(input);
    var students = response.students;
    for (var i = 0; i < students.length; i++) {
        var student = students[i];
        WL.Logger.info("student id: " + student.id);
        resp = getStudentMarks("students/"+student.id);
        students[i].marks = resp;
    }

    return response;
}

function getStudentMarks(path) {
    path = "/edu/"+ path;
    var input = {
        method : 'get',
        returnedContentType : 'json',
        path : path
    };
    var response = WL.Server.invokeHttp(input);

    return response;
}