я следующие два фрагмента:Асинхронный параллельно и обещания не будут работать
1.Это устройство я хотел бы работать:
health.checkHealth = function (req, res) {
async.parallel({
cassandra: function (callback) {
cassandraRepository.ping(callback);
},
kafka: function (callback) {
kafkaHelper.ping(callback);
},
vault: function (callback) {
vaultClient.health()
.then((isOk)=>{
callback(null, isOk)})
.catch(()=>
callback(null, false));
}
}, function (err, result) {
var response = {};
if (result.cassandra) {
response.cassandra = "OK";
} else {
response.cassandra = "Failed";
res.status(500);
}
if (result.kafka) {
response.kafka = "OK";
} else {
response.kafka = "Failed";
res.status(500);
}
if (result.vault) {
response.vault = "OK";
} else {
response.vault = "Failed";
res.status(500);
}
res.send(response);
})
}
2.это является тест проверить блок:
describe('vault is avaliable', function() {
beforeEach(sinon.test(function() {
sinon.stub(vaultClient, "health").resolves(true);
}));
it('should return 200', sinon.test(function (done) {
var response = {
vault: "OK"
};
var req = {};
var res = {};
var spySend = res.send = sinon.spy();
var spyStatus = res.status = sinon.spy();
health.checkHealth(req, res);
expect(spySend.calledOnce).to.equal(true);
expect(spySend.calledWith(response));
expect(spyStatus.calledOnce).to.equal(false);
}));
});
Моя проблема заключается в том, что, когда я называю checkHealth он переходит к следующей строке (ожидать (spySe nd.calledOnce) .to.equal (true);), не дожидаясь завершения обещания vaultClient. Что мне нужно сделать, чтобы ожидания ожидались только после запуска checkHealth.
Да. Не используйте 'async.js' с обещаниями. – Bergi
Какую библиотеку обещаний вы используете? – Bergi
@Bergi свое собственное обещание. нет способа преодолеть это с помощью обещания? – yuria