试着在连接后运行fetch。Fetch比connect更快,而在控制台中我得到了fetch错误,因为它返回的结果比连接完成的要快。但在异步系列文档中是一个运行第二个函数的工具,先返回result.Settimeouts保存情况,但它不美观。在没有承诺的情况下,我怎么能等待?
var bets = [];
async.series([
function(callback){
setTimeout(function(){
connect();
callback(null, 'one');
},1)
},
function(callback){
setTimeout(function(){
fetch_last_30();
callback(null, 'two');
},2000)
}
]);UPD我的连接功能
function connect(){
var url = "https://api....../login";
/* connect to site and get access_token to access other api*/
$.post(
url,
{username: "000", password : "000"},
function(data){
access_token = data["access_token"];
console.log(data["access_token"]);
}
)
}发布于 2015-04-05 06:43:21
在connect()调用完成异步工作之前,不需要调用回调。这是异步库完成其工作的唯一方法。因为connect()是异步的,所以它可能有一个回调本身,您可以使用它来知道何时实际完成。
此外,如果正确使用异步库,则根本不需要setTimeout()调用。
从概念上讲,您希望类似于这样的内容:connect()函数在完成异步操作时调用传入回调:
var bets = [];
async.series([
function(callback){
connect(function() {
callback(null, 'one');
});
},
function(callback){
fetch_last_30();
callback(null, 'two');
}
]);虽然我个人会在这里找到一个更好的解决方案,用于排序两个操作,但您可以将connect()函数更改为:
function connect(callback){
var url = "https://api....../login";
/* connect to site and get access_token to access other api*/
$.post(
url,
{username: "000", password : "000"},
function(data){
access_token = data["access_token"];
console.log(data["access_token"]);
callback(data);
}
)
}下面是一个使用承诺而不是异步库的版本:
function connect(callback){
var url = "https://api....../login";
/* connect to site and get access_token to access other api*/
return $.post(url, {username: "000", password : "000"}).then(function(data){
access_token = data["access_token"];
console.log(data["access_token"]);
return data;
});
}
connect().then(function(data) {
fetch_last_30();
});https://stackoverflow.com/questions/29454785
复制相似问题