javascript - 异步回调不会被调用

标签 javascript node.js asynchronous

我有一个令人沮丧的问题。 我正在尝试提取一个在许多类中使用的函数。 这样做会给我带来“完成”回调的问题。 这是我的代码:

我已提取该函数并将其添加到 util.js 中:

var chai = require('chai');
var expect = chai.expect;
var util = exports = module.exports = {};

chai.use(require('chai-http'));
chai.use(require('chai-string'));

util.testAsyncCalls = function testAsyncCalls(urlArray, urlSuffix, result, callback) {
    async.each(urlArray, function (url, callback) {
        chai.request(url)
            .get(urlSuffix)
            .then(function (res) {
                expect(res).to.have.status(200);
                expect(res.body.totalStatus, res.body.summary).to.equalIgnoreCase(result);
                callback();
            })
            .catch(function (err) {
                callback(err);
            });
    });
};

然后,在测试本身中,我调用如下函数:

 var config = require(process.env.CONFIG || '../env.json'),
   util = require('../util.js');
    describe('App', function () {
        it('Is /home ok ?', function(done) {
            util.testAsyncCalls(config.url.applications, '/home/info', 'SUCCESS', done);
        })
    });

通过 mocha 运行测试会出现以下错误:

Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.

当我对 url 执行正常获取时,我得到了有效响应,因此我认为回调是问题所在。 有人可以帮忙吗?

提前致谢。 问候

最佳答案

您必须在每个末尾调用“全局”回调,请查看 each signature

util.testAsyncCalls = function testAsyncCalls(urlArray, urlSuffix, result, callback) {
    async.each(urlArray, function (url, next) {
        chai.request(url)
        .get(urlSuffix)
        .then(function (res) {
            expect(res).to.have.status(200);
            expect(res.body.totalStatus, res.body.summary).to.equalIgnoreCase(result);
            next();
        })
        .catch(function (err) {
            next(err);
        });
    }, callback);
};

作为一个好的做法,不要在子范围中使用相同的回调名称,例如在每个范围中使用“next”而不是“callback”。

关于javascript - 异步回调不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32221172/

相关文章:

javascript - 在窗口调整大小时调整 div 宽度

node.js - 使用聚合 MongoDB

python - Celery 后台任务出现 "Working outside of request context"错误

c# - Web 应用程序中的异步函数 Thread.Sleep

javascript - 错误类型错误 : Cannot read property 'invalid' of undefined while trying to list FormArray of FormGroups in Angular

javascript - 根据Astro组件中的数据json隐藏或显示div

javascript - 如何在正则表达式中使用特定网站

node.js - 当我尝试在 Jade 中显示 SQL 查询结果时获取 [object Object]

node.js - Mongoose 查找与执行。如何返回值?

javascript - Gulp 任务中 `return` 语句和 `callback` 引用的用途