我有一個貓鼬數據庫查詢避免被迫回調
var player;
Users.findById(req.user._id,function(err,user){
console.log('>>> user: '+user); //----2
player = user;
});
console.log('>>> player: '+player); // ----1
在此代碼1
執行之前2
因爲2
是一個回調中。
有沒有辦法避免這種情況?
我有一個貓鼬數據庫查詢避免被迫回調
var player;
Users.findById(req.user._id,function(err,user){
console.log('>>> user: '+user); //----2
player = user;
});
console.log('>>> player: '+player); // ----1
在此代碼1
執行之前2
因爲2
是一個回調中。
有沒有辦法避免這種情況?
你必須創建另一個功能(可以讓說log
)在與player
變量相同的命名空間中,放console.log('>>> player: '+player);
,並在分配player
後致電log
。
因此,player
變量爲既findById
回調和log
函數可見。
下面是代碼:
var player;
Users.findById(req.user._id,function(err,user){
console.log('>>> user: '+user);
player = user;
log();
});
function log() {
console.log('>>> player: '+player);
}
您需要從回叫中調用1。例如,類似的東西:
var player;
Users.findById(req.user._id,function(err,user){
console.log('>>> user: '+user); // ----1
player = user;
showPlayer();
});
var showPlayer = function() {
console.log('>>> player: '+player); // ----2
}
這是行不通的,因爲你在'player = user'之前調用showPlayer()' – Curious
確實。修正了錯誤,謝謝 – Stilltorik
試試這個:
var player;
Users.findById(req.user._id,function(err,user){
console.log('>>> user: '+user); //----1
player = user;
console.log('>>> player: '+player); // ----2
});
UPDATE:
,這可能是一種替代
var mainFunction = function(player){
if(!player){
Users.findById(req.user._id,function(err,user){
console.log('>>> user:', user);
mainFunction(user);
});
} else {
console.log('>>> player: '+player);
}
};
mainFunction();
對不起,我沒有解釋,但總的來說,我不想把我的其他整個代碼放在'Users.findById(... function(){' – laggingreflex
他們創建一個單獨的函數並在回調中進行調用 – rafaelcastrocouto
假設findById是異步則沒有 –
是的,把它放在同一個回調,或在另一個回調。承諾幫助。 – Tibos