为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

心有法竹 2022-09-23 09:55:42

在你阅读这篇文章之前,请考虑我知道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


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


查看完整描述

1 回答

?
绝地无双

TA贡献1613条经验 获得超4个赞

将请求回调函数括在异步函数中,以便它等待成功响应或错误,然后再继续。


const request = require('request');


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


/**

Async function which would return the response or throw an error from

request 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 function

await execute();

我建议你使用 const 和 let 而不是 var 来表示变量声明,并且还使用另一个库(如 axios)而不是请求,因为请求已被弃用


查看完整回答
反对 回复 5天前
  • 1 回答
  • 0 关注
  • 7 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信