gpt4 book ai didi

javascript - Node.js 如何使用回调将数据发送到 Web 界面

转载 作者:行者123 更新时间:2023-12-03 07:16:17 25 4
gpt4 key购买 nike

我有两个查询 twitter api 的函数。查询是通过网络界面完成的,当复选框打开时我调用每个函数。我现在的问题是在完成所有查询后,我希望能够存储数据并将其发送回网络界面。我该怎么做?

    if (string.checktweet1 == 'on') {
tweets(string.teamname)
}
if (string.checkmentions1 == 'on'){
mentions(string.teamname)
}
if (string.checktweet2 == 'on'){
tweets(string.playername)
}

if (string.checkmentions2 == 'on'){
mentions(string.playername)
}
<小时/>
      function mentions(x){
client.get('search/tweets', {q:x, count:1},
function (err,data,){
for(var index in data.statuses){
var tweet = data.statuses[index];
console.log(tweet.text);
}
})
}

我的代码仅发送“tweets”功能的数据

      json = {};
function tweets(y){
client.get('statuses/user_timeline', {screen_name:y, count:1},
function(err,data) {
for(var index in data){
var tweet = data[index];
console.log(tweet.text);
}
json[index] = tweet
res.end(JSON.stringify(json));
})
}

最佳答案

据我了解,您并不希望保存数据,而只是收集多个异步调用的结果,并在所有完成后将数据传递给您的客户端?如果是这样,您可以使用 asyncpromises .

Stack Overflow 中已经有这样的例子,例如。这个Node.js: Best way to perform multiple async operations, then do something else?但无论如何,这里都简化了两者的实现。

使用异步

var async = require('async');

// ...

var tweets = function(y) {
return function(cb) {
client.get('statuses/user_timeline', {screen_name: y, count: 1},
function(err, data) {
// Process the data ...
cb(null, processedTweets);
}
);
}
};

var mentions = function(x) {
return function(cb) {
client.get('search/tweets', {q: x , count: 1},
function(err, data) {
// Process the data ...
cb(null, processedMentions);
}
);
}
};

app.get('/mytweetsapi', function(req, res) {
var tasks = [];
if (string.checktweet1 == 'on') {
tasks.push(tweets(string.teamname));
}
if (string.checkmentions1 == 'on'){
tasks.push(mentions(string.teamname));
}
if (string.checktweet2 == 'on'){
tasks.put(tweets(string.playername));
}
if (string.checkmentions2 == 'on'){
tasks.put(mentions(string.playername));
}

async.parallel(tasks, function(err, results) {
// Process the results array ...
res.json(processedResults);
});
});

使用 promise

var Promise = require('bluebird');

// ...

var tweets = function(y) {
return new Promise(function(resolve, reject) {
client.get('statuses/user_timeline', {screen_name: y, count: 1},
function(err, data) {
// Process the data ...
resolve(processedTweets);
}
);
});
};

var mentions = function(x) {
return new Promise(function(resolve, reject) {
client.get('search/tweets', {q: x , count: 1},
function(err, data) {
// Process the data ...
resolve(processedMentions);
}
);
});
};

app.get('/mytweetsapi', function(req, res) {
var tasks = [];
// Same if this then tasks.push as in async example here

Promse.all(tasks).then(function(results) {
// Process the results array ...
res.json(processedResults);
});
});

我不知道您使用的是什么 HTTP 客户端,但您也许可以使用 var client = Promise.promisifyAll(require('your-client-lib'));将方法转换为返回 promise ,然后您可以将 tweets 转换为和mentions功能

var tweets = function(y) {
return client.get('statuses/user_timeline', {screen_name: y, count: 1});
};

这样虽然 resultsPromise.all是混合响应,您需要确定哪些是 tweets分别是mentions正确处理它们。

关于javascript - Node.js 如何使用回调将数据发送到 Web 界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36408974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com