将 bluebird promise 添加到 NodeJS 模块,然后未定义函数

Adding bluebird promise to NodeJS module, then function is not defined

我是promise 和bluebird 的新手,在我目前的项目中,我必须处理很多异步API 调用,因此我想使用JS promise 作为我的主要工具。 我导入的模块之一如下所示:

var Promise = require("bluebird");
var watson = Promise.promisifyAll(require('watson-developer-cloud'));

var conversation = watson.init();

exports.enterMessage = function (inputText) {
  var result;  //want to return
  conversation.message({
    input: {
      "text": inputText
    }
  }, function(err, response) {
    if (err) {
      console.log('error:', err);
      result = err;
    }
    else {
      result = response.output.text;
    }
  });
  console.log(result);  //sync call, result === undefined
  return result;
}

我的问题是我应该如何处理这个问题?我了解有关将 promise 与 IO 一起使用的示例,例如 fs。所以我尝试通过做conversation.message(...).then(function(response){result = response.output.text})来模仿这种方式,但它说 conversation.message(...).then() is not defined.

感谢jfriend00的link,我修正了我的逻辑并使用正确的方式来处理这个异步调用。

固定代码如下:

//app.js
  var Promise = require("bluebird");
  var conversation = Promise.promisifyAll(require('./watson-conversation'));
  conversation.enterMessage(currentInput).then(function(val){
      res.send(val)}
    ).catch(function(err){
      console.log(err)
    });
  });

//watson-conversation.js

var conversation = watson.init();

exports.enterMessage = function (inputText) {
  return new Promise(function(resolve, reject){
    conversation.message({
      input: {
        "text": inputText
      }
    }, function(err, response) {
      if (err) {
        console.log('error:', err);
        reject(err);
      }
      else {
        resolve(response.output.text);
      }
    });
  });
}