gpt4 book ai didi

javascript - 异步回调不会被调用

转载 作者:太空宇宙 更新时间:2023-11-04 02:22:51 24 4
gpt4 key购买 nike

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

我已提取该函数并将其添加到 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com