我有一个js文件,我在其中导出一个promise并在另一个文件中调用它。 我不明白为什么我打电话给诺言时控制台日志不会被触发, 也许我没有完全理解诺言如何运作,或者我所说的诺言方式有误
pub.js
var config = require('../config');
var q = 'tasks';
var open = require('amqplib').connect('amqp://'+ config.rabbitmq.url);
module.exports = open.then(function(conn) {
return conn.createChannel();
}).then(function(ch) {
return ch.assertQueue(q).then(function(ok) {
console.log('inside publisher')
const r = ch.sendToQueue(q, Buffer.from('something to do'));
console.log('r',r)
return r
});
}).catch(console.warn);
index.js(我称之为诺言)
var express = require('express');
var router = express.Router();
var publisher = require('../connectors/pub');
var rabbitPromise = () => (
new Promise((resolve,reject)=>{
publisher
.then(res=>{
console.log('-----------------------')
console.log('publishing now',res)
resolve(res)
})
})
);
/* GET home page. */
router.get('/', async(req, res, next) => {
const result_pub = await rabbitPromise()
res.send('ok')
});
我希望看到console.log('inside Publisher'),但我没有看到,我只能看到console.log('------------------ -----')和console.log('publishing now',res),
答案 0 :(得分:0)
pub.js中的链接不正确。为了兑现承诺,它应该像这样:
module.exports = open
.then(function(conn) {
return conn.createChannel();
})
.then(function(ch) {
return ch.assertQueue(q);
})
.then(function(ok) {
console.log('inside publisher')
const r = ch.sendToQueue(q, Buffer.from('something to do'));
console.log('r',r)
return r
})
.catch(console.warn);