【发布时间】:2018-01-17 13:29:23
【问题描述】:
在节点脚本的 for 循环中使用 Promise 时遇到了一个小问题
我首先从 twitter 搜索中调用数据,我想将所有推文从英语翻译成法语,然后将结果发送到我的应用程序的前端。似乎我当前的模型无法正常工作,因为 promises.all() console.log('ALL PROMISES DONE') 在触发 T.get() 函数时从一开始就触发了。有什么建议吗?
var Twit = require('twit')
var T = new Twit({
consumer_key: '...',
consumer_secret: '...',
access_token: '...',
access_token_secret: '...',
timeout_ms: 60*1000, // optional HTTP request timeout to apply to all requests.
})
//TWITTER
app.post('/twitter/search/hashtags', function (req, res) {
// TWITTER QUERY PARAMS
var params = {
q: req.body.search,
count: 2,
//lang: 'fr'
}
//GData
var bloc = [];
var promises = [];
// TWITTER API GET INFORMATION
T.get('search/tweets', params, function(err, data, response) {
// if there no errors
if (!err) {
//PROCESSING DATA FROM TWITTER
if(data){
for(var i= 0; i < data.statuses.length; i++){
//translate all text string which are not in french
var lang = data.statuses[i].lang;
var str = data.statuses[i].text;
if(lang != "fr"){
promises.push(translate_str(data.statuses[i].user.screen_name, str, lang));
}
}
}
//res.send(bloc);
}
// if unable to Search a tweet
else {
console.log('Something went wrong while SEARCHING...');
console.log(err);
}
});
Promise.all(promises)
.then(function(data){ console.log("ALL PROMISES DONE"); console.log(data);/* do stuff when success */ })
.catch(function(err){ /* error handling */ });
//TRANSLATE
function translate_str(name, str, lang){
return new Promise(function(resolve, reject){
translate(str, {from: lang, to: 'fr'}).then(res => {
console.log('TRANSLATED INTO :');
console.log(res.text);
//SENTIMENT ANALYSIS
var r1 = sentiment(res.text, 'fr');
console.log(r1.score);
console.log(r1.positive);
//IF SCORE POSITIVE THEN PUSH TO FRONT
if(r1.score > 0){
resolve({
name: name,
text: res.text,
lang: lang,
selected: false
})
}
}).catch(err => {
console.error(err);
});
})
}
})
【问题讨论】:
-
什么是
T...? -
T 是 twit 库。我用额外的信息更新了我的问题
-
那个模块说你可以同时使用cb和promise,但我真的不知道你为什么会......
-
我不明白你的评论。我正在尝试等待翻译 api 返回结果,然后再将所有数据发送到我的应用程序的前端。
-
哦,我知道你现在做错了什么
标签: javascript node.js promise