async.js 和系列问题
async.js and series issue
连接后尝试运行获取。获取比连接快,并且在控制台中我收到获取错误,因为它 returns 结果比连接完成更快。但是在异步系列的文档中,有一个工具可以在第一个 returns 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)
}
]);
更新
我的连接功能
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"]);
}
)
}
在 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);
}
)
}
这是一个使用 promises 而不是异步库的版本:
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();
});
连接后尝试运行获取。获取比连接快,并且在控制台中我收到获取错误,因为它 returns 结果比连接完成更快。但是在异步系列的文档中,有一个工具可以在第一个 returns 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)
}
]);
更新 我的连接功能
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"]);
}
)
}
在 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);
}
)
}
这是一个使用 promises 而不是异步库的版本:
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();
});