执行promise时未触发console.log

时间:2019-05-06 11:27:22

标签: node.js es6-promise

我有一个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),

1 个答案:

答案 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);