我正在開發一個使用NodeJS的應用程序,其中兩個查詢相互依賴,這裏是對我的情況的解釋。在nodejs中阻止IO
我要查詢數據庫中的一些值說那我就必須查詢 數據庫爲其他值B僅如果在數據庫中的一個。
我知道我可以的NodeJS」像一個執行查詢自然的方式做到這一點時,其結果是準備在A的回調執行對於B查詢,然後終於呈現B的回調響應。
這是我的問題,是否存在我剛剛提到的有關嵌套回調的解決方案中的設計問題。
其次,有什麼方法可以使NodeJs IO成爲不阻塞的阻塞?
我正在開發一個使用NodeJS的應用程序,其中兩個查詢相互依賴,這裏是對我的情況的解釋。在nodejs中阻止IO
我要查詢數據庫中的一些值說那我就必須查詢 數據庫爲其他值B僅如果在數據庫中的一個。
我知道我可以的NodeJS」像一個執行查詢自然的方式做到這一點時,其結果是準備在A的回調執行對於B查詢,然後終於呈現B的回調響應。
這是我的問題,是否存在我剛剛提到的有關嵌套回調的解決方案中的設計問題。
其次,有什麼方法可以使NodeJs IO成爲不阻塞的阻塞?
我被告知了一個名爲Async的庫,當我啓動我的NodeJs項目時,我希望找到id。它可以處理這個等等。
異步提供大約20功能,包括通常的「功能性」 嫌疑人(地圖,減少,過濾器,每個...)以及爲異步控制流(並聯,串聯,瀑布...)的一些常見模式 。所有 這些函數假定您遵循node.js約定,即提供 單個回調作爲異步函數的最後一個參數。從現場
基本的例子,這將有助於在方案
async.series([
function(callback){
// do db call one
callback(null, 'one');
},
function(callback){
// do db call two
callback(null, 'two');
}
],
function(err, results){
// results is now equal to ['one', 'two']
});
這是我的問題,在剛剛提到的解決方案中,是否存在一個設計問題,可能是關於嵌套回調。
不,您的解決方案非常好。
其次有沒有什麼方法可以讓NodeJs IO阻塞爲非阻塞?
是的。你可以編寫你自己的C++擴展來提供阻塞調用。
如果阻塞IO,整個程序將無法對任何請求作出迴應所有,直到完成這些查詢。這通常不是你想要的。 – Chuck
節點確實有一些提供阻塞和非阻塞版本的I/O函數 - 例如fs.readFile和fs.readFileSync。如果你的數據庫驅動程序提供了阻塞功能 - 你可以使用它。阻塞時可能需要的一個例子是節點應用程序何時啓動 - 因爲無論如何,直到初始化函數完成之前,您都不會收到任何請求。 – Svbaker