如何用Javascript包装异步调用?
我希望有三个函数可以执行类似的操作:如何用Javascript包装异步调用?,javascript,asynchronous,Javascript,Asynchronous,我希望有三个函数可以执行类似的操作: function getuser1(){ var user = b(); //do some stuff to user return user; } function getuser2(){ var user = asyncfinduser(); //do some different stuff to user return user; } function asyncfinduser(){ userDB.find( {
function getuser1(){
var user = b();
//do some stuff to user
return user;
}
function getuser2(){
var user = asyncfinduser();
//do some different stuff to user
return user;
}
function asyncfinduser(){
userDB.find( { /* some criteria */ }, function (error, user) {
//return found user to functions above
return user;
});
)
显然,上述方法行不通,因此如何解决此问题?谢谢由于您不能,您需要使用回调:
function getuser1(callback) {
asyncfinduser(function(error, user) {
if (error) return callback(error);
//do some stuff to user
callback(null, user);
});
}
function getuser2(callback) {
asyncfinduser(function(error, user) {
if (error) return callback(error);
//do some different stuff to user
callback(null, user);
});
}
function asyncfinduser(callback) {
userDB.find( { /* some criteria */ }, function (error, user) {
if (error) return callback(error);
//return found user to functions above
callback(null, user);
});
}
但是,您可能可以应用:
您不应该将用户从异步函数返回到其他函数,而应该将其他函数作为回调传递给异步函数。正如@jahroy建议的那样,使用回调,或者从asyncfinduser函数返回承诺。
var Promise = …; // some library
function getuser1() {
return asyncfinduser().then(function(user) {
//do some stuff to user
return user;
});
}
function getuser2() {
return asyncfinduser().then(function(user) {
//do some different stuff to user
return user;
});
}
function asyncfinduser() {
return new Promise(function(resolve, reject) {
userDB.find( { /* some criteria */ }, function (error, user) {
if (error) reject(error);
else resolve(user); //return found user to functions above
});
}