【发布时间】:2019-05-06 20:00:07
【问题描述】:
我有一个 js 文件,我在其中导出了一个承诺,然后在另一个文件中调用它。 我不明白为什么当我调用承诺时控制台日志没有被触发, 也许我没有完全理解承诺是如何运作的,或者我称之为承诺的方式有问题
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(我称之为 promise)
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),
【问题讨论】:
-
注意 .then 应该在 Promise 对象上调用。出版商的角色是什么?
-
@jank 发布者向 rabbitmq 发布一条消息并返回 true
-
Promise 不是惰性的,一个链会立即执行,因此一旦队列被断言,“内部发布者”消息就会被记录。您确定确实建立了连接吗?可能需要一段时间。
标签: node.js es6-promise