我试图在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]
}
任何人都可以帮助我吗?或者我是否必须完全改变方法?
谢谢, 布拉德
答案 0 :(得分:1)
很遗憾,您无法返回确切的值,但您可以返回Promise。这意味着函数analyzeSentimentOfText
将返回一个解析为值而不是实际值的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
函数中使用。
答案 1 :(得分:0)
你试过了吗?
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]