繁体   English   中英

如何从javascript函数中的.then内部返回值?

[英]How can I return a value from within a .then inside a javascript function?

我正在尝试返回从JavaScript函数中的.then调用中提取的值(如果我使用的术语不正确,请原谅,请纠正我,以便我学习)。 这是我正在使用的代码

function analyzeSentimentOfText (text) {
  // [START language_sentiment_string]
  // Imports the Google Cloud client library
  const Language = require('@google-cloud/language');
  // Instantiates a client
  const language = Language();

  // The text to analyze, e.g. "Hello, world!"
  // const text = 'Hello, world!';

  const document = {
    'content': text,
    type: 'PLAIN_TEXT'
  };


  // Detects the sentiment of the document
  language.analyzeSentiment({ document: document }) 

    .then((results) => {
      const sentiment = results[0].documentSentiment;

      console.log(`Document sentiment:`);
      console.log(`  Score: ${sentiment.score}`);
      console.log(`  Magnitude: ${sentiment.magnitude}`);

    })
    .catch((err) => {
      console.error('ERROR:', err);
    });
  // [END language_sentiment_string]
}

我要完成的工作是提取结果的情感评分(最好是幅度)[0] .documentSentiment.sentiment.score。

我试图做的是

function analyzeSentimentOfText (text) {

  const Language = require('@google-cloud/language');
  const language = Language();
  const document = {
    'content': text,
    type: 'PLAIN_TEXT'
  };

  language.analyzeSentiment({ document: document }) 

    .then((results) => {
      const sentiment = results[0].documentSentiment;
      return sentiment.score;
    })
    .catch((err) => {
      console.error('ERROR:', err);
    });
  // [END language_sentiment_string]
}

谁能帮我吗? 还是我必须完全改变方法?

谢谢布拉德

不幸的是,您不能返回确切的值,但是可以返回Promise。 这意味着函数analyzeSentimentOfText将返回一个Promise,该Promise解析为一个值,而不是实际值。

像这样:

function analyzeSentimentOfText (text) {

  const Language = require('@google-cloud/language');
  const language = Language();
  const document = {
    'content': text,
    type: 'PLAIN_TEXT'
  };

  return language.analyzeSentiment({ document: document }) 
    .then(results => results[0].documentSentiment.score);
  // [END language_sentiment_string]
}

然后将这样使用:

analyzeSentimentOfText("sometext")
  .then((score) => {
    console.log(score); // Whatever the value of sentiment.score is
  })
  .catch((err) => {
    console.error('ERROR:', err);
  });

如果您针对Node v7.6或更高版本,则可以使用async/await

async function analyzeSentimentOfText (text) {
  const Language = require('@google-cloud/language');
  const language = Language();
  const document = {
    'content': text,
    type: 'PLAIN_TEXT'
  };

  return (
    await language.analyzeSentiment({ document: document })
  )[0].documentSentiment.score
}

(async () => {
  try {
    let score = await analyzeSentimentOfText("someText");
  } catch (err) {
    console.error('ERROR:', err);
  }
})();

上面具有异步立即调用函数的原因是因为await 只能在async函数内使用

你有没有尝试过:

function analyzeSentimentOfText (text) {

const Language = require('@google-cloud/language');
const language = Language();
const document = {
  'content': text,
  type: 'PLAIN_TEXT'
};

return language.analyzeSentiment({ document: document }) 
  .then((results) => {
    const sentiment = results[0].documentSentiment;
    return sentiment.score;
  })
  .catch((err) => {
    console.error('ERROR:', err);
  });
// [END language_sentiment_string]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM