在我的應用程序,即時通訊使用貓鼬與藍鳥這樣的:在數據庫如何通過貓鼬找回文檔?
var mongoose = require('mongoose');
mongoose.Promise = require('bluebird');
在同一文件中,林持有其搜索「約會」的功能-documents。該函數的返回值應該是發現文檔的結果數組,而不是承諾,查詢或其他內容。
但不幸的是,它看起來像程序會跳回到調用函數,然後諾言將實現。那我該如何處理呢?
這是我在當前狀態下功能:
get_intersecting_appointment: function(appointment) {
var appointmentQuery = AppointmentModel.find({
$and: [{
begin: {
$lte: appointment.begin
}
},
{
end: {
$gte: appointment.end
}
}
]
});
return appointmentQuery.then(function(appointments) {
debug("Found appointments:");
debug(appointments);
if (appointments) {
return appointments;
} else {
return [];
}
});
},
提示:調用函數內debug("Found appointments:")
之前打印的「下一個調試輸出」;從上面。比方說,調用函數如下:
appointment_is_available: function(appointment) {
var appointments = dbcon.get_intersecting_appointment(appointment);
//...
}
那麼即使這會正常工作,我寧願去異步代碼,因爲調用函數將被另一個函數被調用,我只是想避免建傳遞迴調的長鏈函數。另外,我必須在'appointment_is_available'函數內使用結果,因爲我只想從中返回一個布爾值。如果我只得到一個回調,該函數將在回調被調用之前返回,所以同樣的問題在這裏(沒有辦法等待像「than」或什麼的IMHO回調)。 –
那麼,你可以使用'Promise'或[異步模塊](https://github.com/caolan/async) – abdulbarik
是的,這就是起源問題:我上面的例子使用承諾與then方法,但它贏得了'在返回到調用函數之前等待then(...)的結果,這不是我期望的行爲。那麼我怎麼能在這裏等待履行諾言呢? –