【问题标题】:Async.parallelLimit Function Executing Callback Function Before TasksAsync.parallelLimit 函数在任务之前执行回调函数
【发布时间】:2022-01-05 16:22:52
【问题描述】:

我正在尝试为不同的环境并行设置一些 newman 测试运行,然后在所有结果完成后通过 API 请求创建 Jira 票证。但是,当我为该任务使用 ansync.parallelLimit 函数时,我发现创建 jira 票证时没有任何来自测试运行的信息。

这个过程的简化版本是这样的:

var async = require('async');
const path = require('path');
const newman = require('newman');
config = require(path.join(__dirname, 'config.json'));

const jira_data = [];

var create_ticket = function(err, results){
    console.log("Run Complete");
};

var test_run = async() =>{
  newman.run({
    collection: path.join(__dirname, 'Test.postman_collection.json'),
    reporters: ['htmlextra'],
    reporter: {
      htmlextra : { export : path.join(__dirname, '/reports/Test.html')}
    },})
}

var commands = [test_run,test_run,test_run,test_run];

async.parallelLimit(commands,4, (err, results) => {
  console.log("Run Complete");
  console.log(results);
});

这将导致以下输出,表明 create_ticket 在其他任何操作之前执行:

运行完成
使用 htmlextra 版本 1.22.3
使用 htmlextra 版本 1.22.3
使用 htmlextra 版本 1.22.3
使用 htmlextra 版本 1.22.3
创建了 htmlextra 报告。
创建了 htmlextra 报告。
创建了 htmlextra 报告。
创建了 htmlextra 报告。

或者,我可以让 test_run 成为一个函数而不是异步,如下所示:

var async = require('async');
const path = require('path');
const newman = require('newman');

const jira_data = [];

var create_ticket = function(err, results){
    console.log("Test Run Complete");
};

var test_run = function() {
  newman.run({
    collection: path.join(__dirname, 'Test.postman_collection.json'),
    reporters: ['htmlextra'],
    reporter: {
      htmlextra : { export : path.join(__dirname, '/reports/Test.html')}
    },}).on('request', function(err, results) {
      console.log("Hello");
    })
}

var commands = [test_run, test_run, test_run, test_run];

async.parallelLimit(commands, 4, create_ticket);

但是现在,创建工单根本不运行:

使用 htmlextra 版本 1.22.3
使用 htmlextra 版本 1.22.3
使用 htmlextra 版本 1.22.3
使用 htmlextra 版本 1.22.3
你好
你好
你好
你好
创建了 htmlextra 报告。
创建了 htmlextra 报告。
创建了 htmlextra 报告。
创建了 htmlextra 报告。

在花费了比我愿意承认的更多的时间来使用变量类型、参数传递和其他修复的不同组合之后,我完全被难住了。任何帮助都将不胜感激。

【问题讨论】:

    标签: javascript node.js dom-events async.js postman-newman


    【解决方案1】:

    您需要在 test_run 中传递并调用一个回调来完成异步任务。

    var test_run = function(callback) {
      newman.run({
        collection: path.join(__dirname, 'Test.postman_collection.json'),
        reporters: ['htmlextra'],
        reporter: {
          htmlextra : { export : path.join(__dirname, '/reports/Test.html')}
        },}).on('request', function(err, results) {
          console.log("Hello");
          callback(null);
        })
    }

    【讨论】:

      猜你喜欢
      • 2013-11-05
      • 1970-01-01
      • 2021-08-02
      • 2018-08-12
      • 2019-11-13
      • 1970-01-01
      • 2018-06-04
      • 1970-01-01
      • 2018-09-23
      相关资源
      最近更新 更多