使用 Java 脚本和节点进行顺序休息调用

在你阅读这篇文章之前,请考虑我知道Javascript和节点的基础知识。但似乎我需要编写简单的Javascript解决方案来帮助其他人进行测试。解决方案包含许多JS脚本,这些脚本将在带有节点的詹金斯中执行。


大多数脚本都发送相互依赖的 rest 调用。


我正在使用节点请求模块来执行这些调用。


所以我面临的问题是异步执行。


因此,让我们想象一下,我们有一个对象,其中包含一个依赖对象。


parentObject = {'name': 'someName', 'id': 1, 'childObjects': [{'name': someName', 'id': 1},{'name': someName', 'id': 2}...]}

和 都有自己的终结点。所以我们可以克鲁德。parentObjectchildObjectschildObjects


问题来了。根据名称,我需要删除此对象。我使用以下代码来执行此操作:childObject


var request = require('request');


...


const objectToPreserve = ['someName1','someName2'...]

var options = {'method': 'GET', 'url': baseUrl + '/childObject'+urlParam + '&parentObejctid=' + parentObjectId, 'headers': {'Authorization': token}};

    request(options,function(error,response){

        if (error) throw new Error(error);

        var childObjects = JSON.parse(response.body);

        for (i of childObjects) {

            var name = i.name;

            var childObjectId = i.id;

            if (objectToPreserve.indexOf(name) > -1 ) {

                console.log(name,' preserved')

            } else {

                var options = {'method': 'DELETE', 'url': baseUrl + '/childObject' + urlParam + '&id=' + childObjectId, 'headers': {'Authorization': token}};

                request(options,function(error,response){

                    if(error) throw new Error(error);

                    console.log(JSON.parse(response.statusCode));

                });

            }

        }

    })

删除后,我需要使用其他属性进行更新,或者将该代码放在块中。objectToPreserveif (objectToPreserve.indexOf(name) > -1 ) {...


此外,在内部有自己的内部,在初始删除和更新之后,我也需要向该第二级子对象添加属性。childObjectchildObject


结构如下所示:parentObject


parentObject

|-childObject1

||-childobject1.1

|-childObject2

||-childObject2.1

由于可能包含 100 多个子对象的原因,某些删除请求失败,状态代码为 500 或 504。因此,我想按顺序进行这些调用。parentObject


有人可以帮助解决这个问题,也许可以为假人解释如何使用请求模块重写代码?


心有法竹
浏览 110回答 1
1回答

绝地无双

将请求回调函数括在异步函数中,以便它等待成功响应或错误,然后再继续。const request = require('request');const objectToPreserve = ['someName1', 'someName2'];/**Async function which would return the response or throw an error fromrequest endpoint*/const requestAsync = async(options) => {  request(options, function(error, response) {    if (error) {      throw new Error(error);    }    return response;  });};/**Main function*/const execute = async() => {  const options = {    'method': 'GET',    'url': baseUrl + '/childObject' + urlParam + '&parentObejctid=' + parentObjectId,    'headers': {      'Authorization': token    }  };  const response = await requestAsync(options);  const childObjects = JSON.parse(response.body);  for (const i of childObjects) {    const name = i.name;    const childObjectId = i.id;    if (objectToPreserve.indexOf(name) > -1) {      console.log(name, ' preserved')    } else {      const deleteOptions = {        'method': 'DELETE',        'url': baseUrl + '/childObject' + urlParam + '&id=' + childObjectId,        'headers': {          'Authorization': token        }      };      const deleteResponse = await requestAsync(deleteOptions);      console.log(JSON.parse(deleteResponse.statusCode));    }  }}// Execute main functionawait execute();我建议你使用 const 和 let 而不是 var 来表示变量声明,并且还使用另一个库(如 axios)而不是请求,因为请求已被弃用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript