gpt4 book ai didi

node.js - 在node.js中同步调用

转载 作者:太空宇宙 更新时间:2023-11-03 23:38:47 26 4
gpt4 key购买 nike

我有以下方法:

var get = function(query_para,callback) {

var queryParams = query_para;
var timestamp ;
var some_Data = {};
var data;

request({url:"http://some-url.com/q?", qs:queryParams}, function(err, response, body) {
if(err) { console.log(err); return; }
console.log(body);
var data = JSON.parse(body);

some_Data.count = data.count;

console.log("Returned data: "+some_Data.count);

callback(null,some_Data);
});

};

我想调用这个方法两次并合并它们的结果。我通过以下方式使用回调实现了它:

get({ start: '2014/09/13-10:00:00', end: '2014/09/13-11:00:00', format: 'json' }, function(err, result1){
get({ start: '2014/09/13-11:00:00', end: '2014/09/13-12:00:00', format: 'json' }, function(err, result2){
console.log("r1:: "+result1.count);
console.log("r2:: "+result2.count);
});
});

有没有更好的办法让它同步?我读到了一些东西(promises 和sync-client),但我不明白。调用该函数两次并合并结果的最佳方法是什么?

最佳答案

首先,您的代码看起来并不同步。我建议将其保留为异步并使用像 Q 这样的 Promise 库。首先,确保安装了 Q:

npm install q

从您的 get 函数中,返回一个 promise :

var get = function(query_para) {

var queryParams = query_para;
var timestamp ;
var some_Data = {};
var data;
//Use q
var Q = require("q");

//define a deferred that will be resolved later
var deferred = Q.defer();

request({url:"http://some-url.com/q?", qs:queryParams}, function(err, response, body) {
if(err) { console.log(err); return; }
console.log(body);
var data = JSON.parse(body);

some_Data.count = data.count;

console.log("Returned data: "+some_Data.count);

//resolve the deferred here
deferred.resolve(some_Data);
});

//return the promise
return deferred.promise;
};

从调用 get 函数的代码中:

var q = require("q");
var promiseArr = [];
//First promise to your get function
promiseArr.push(get({ start: '2014/09/13-10:00:00', end: '2014/09/13-11:00:00', format: 'json'}));
//Second promise
promiseArr.push(get({ start: '2014/09/13-11:00:00', end: '2014/09/13-12:00:00', format: 'json' }));

//Use q.all to call a callback when all promises in the array are resolved:
q.all(promiseArr).then(function (results) {
//First item is the data resolved from the first promise in the array
console.log("r1:: "+results[0].count);
//Second item is data resolved from second promise
console.log("r2:: "+results[1].count);
});

关于node.js - 在node.js中同步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27606284/

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