【问题标题】:Returning promise resolve value in route, node.js / express返回路由中的承诺解析值,node.js / express
【发布时间】:2017-09-08 00:19:04
【问题描述】:

我正在创建一个 MEAN 堆栈 web 应用程序,但我在 Node / Express 方面遇到了 Promise 问题。

我有我的路由器文件,路由设置如下:

router.get('/tweets', (req, res) => {
  let mc = new MeaningCloudModel();
  let tweets = "randomstring123";
  mc.getTopics(tweets)
  .then((topics)=> {
    res.send(topics);
  });
})

WeightingCloudModel 代码在这里:

let MeaningCloud = require('meaning-cloud');

class MeaningCloudModel{

  constructor() {
    this.meaning = MeaningCloud({
      //config defined here
      }
    });
  }

  getTopics(tweetStr){
      this.meaning.topics_extraction({
        lang: 'en',
        txt: tweetStr,
        tt: 'eco'
      }).then(function(res) {
        return (res.body);
      });
  }
}

module.exports = MeaningCloudModel;

当我导航到该路线时,我收到控制台错误:

(node:8916) UnhandledPromiseRejectionWarning: UnhandledPromiseRejectionWarning: Unhandled Promise Rejection (rejection id: 2): TypeError: Cannot read property 'then' of undefined

我知道我没有正确设置我的承诺,但我不知道如何解决它。

路由器调用 MeaningCloudModel 上的 getTopics 方法,该方法本身正在调用含义云依赖项中的方法,该依赖项返回一个承诺。如何从该承诺返回输出作为对“/tweets”路由请求的响应?

【问题讨论】:

  • 您认为返回承诺的代码中的某些内容不会返回承诺。
  • getTopics函数中添加return语句。
  • getTopics 应该返回一个承诺,但它什么也不返回。

标签: javascript node.js promise


【解决方案1】:

这是因为您试图获取 undefined 对象的“then”属性。

试试这个:

getTopics(tweetStr){
      return this.meaning.topics_extraction({
        lang: 'en',
        txt: tweetStr,
        tt: 'eco'
      }).then(function(res) {
        return (res.body);
      });
  }

【讨论】:

  • 抱歉,我的错,正在检查 MDN 中的 Promise 文档。看来您必须返回一个新的 Promise。看看这个。
猜你喜欢
  • 2017-05-18
  • 1970-01-01
  • 1970-01-01
  • 2017-07-12
  • 2014-09-16
  • 1970-01-01
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多