![](/img/trans.png)
[英]How can I change the return value of a function from within a sub-function (JavaScript)
[英]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.