asynchronous并行和承诺不会工作
我有以下两个片段:
这是我想要运行的单位:
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); })
}
这是检查单位的testing:
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它进行到下一行(期待(spySend.calledOnce).to.equal(true);)而不等待vaultClient的承诺完成。 我需要做什么才能使期望运行后才运行“checkHealth”。
您不需要使用async
– 您可以使用Promise.all
直接在您的代码中使用Promise.all
如其他人所build议的。
这里的代码使用来自Bluebird的promisifyAll
,但是您也可以将API转换为使用promise 。
//.props is bluebird, you can `.all` with native promises too Promise.props({ cassandra: cassandraRepository.pingAsync(); // created by promisifyAll kafka: kafkaHelper.pingAsync(), vault: vaultClient.health() }).then(results => { // access results.cassandra, results.kafka and results.vaule here });
- 传播承诺的正确方法是什么?
- stripe angular错误:Uncaught(在promise中):TypeError:无法读取未定义的属性'stripeService'
- 使用ES6的顺序迭代承诺
- 在Sequelize事务中使用循环和promise
- 如何find哪些promise在nodejs中未处理UnhandledPromiseRejectionWarning?
- 运行蓝鸟承诺顺序,没有返回值?
- Node.js未被捕获的套接字exception – 套接字已closures
- testing蓝鸟承诺与Nodejs誓言(BDD)
- node.jserror handling。 将错误信息存储在err中,而不是自动将其打印到控制台