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

使用 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问题来了。根据名称,我需要删除此对象。我使用以下代码来执行此操作:childObjectvar 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结构如下所示:parentObjectparentObject|-childObject1||-childobject1.1|-childObject2||-childObject2.1由于可能包含 100 多个子对象的原因,某些删除请求失败,状态代码为 500 或 504。因此,我想按顺序进行这些调用。parentObject有人可以帮助解决这个问题,也许可以为假人解释如何使用请求模块重写代码?
查看完整描述

1 回答

?
绝地无双

TA贡献1946条经验 获得超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)而不是请求,因为请求已被弃用


查看完整回答
反对 回复 2022-09-23
  • 1 回答
  • 0 关注
  • 109 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号