在啓動我的Node.js應用程序時,我想在繼續控制流程之前對PostgreSQL數據庫進行幾次同步調用以檢查一些事情。我怎樣才能使用node-postgres包實現這一點?如何使用node-postgres進行同步查詢(阻塞調用)?
2
A
回答
3
將呼叫同步的唯一方法是窩在它們回調:
function init() {
pg.connect('tcp://[email protected]/db', function(err, client, done) {
client.query("SELECT column FROM table", function(err, result) {
// check some things...
client.query("SELECT column FROM other_table", function(err, result) {
// check some other things...
main(); // proceed with flow...
}
});
}
}
function main() {
// main logic
}
這可以是一個痛苦,並會在一些其他語言的小事,但它是野獸的本質。
0
我認爲這是適用的。
1
鑑於通話本質上是異步的,您將需要通過回調(事實上的節點樣式),異步或通過承諾來管理它(Q,when.js,藍鳥等)...)請注意,對於接受的答案,回調是而不是這是唯一的方法。
0
brianc(節點的Postgres的作者)commented here,即
「做同步查詢的唯一方法就是使用pg-native並使用
sync
變種的 方法。使用純JavaScript客戶端是不可能做同步 查詢,因爲節點如何工作。「
希望這有助於...
0
您可以通過組合使用pg-pool與asyncawait做到這一點:
var suspendable = async (function defn(a, b) {
var name1 = await(pool.query('select $1::text as name', ['foo']));
console.log(name1.rows[0].name, 'says hello');
var name2 = await(pool.query('select $1::text as name', ['bar']));
console.log(name2.rows[0].name, 'says hello');
});
suspendable();
1
相關問題
- 1. 如何使阻塞/同步調用進入Akka actor系統?
- 2. jQuery同步非阻塞AJAX調用
- 3. 同步阻塞?
- 4. 排隊使用StringRequest和RequestFuture進行阻塞同步呼叫
- 5. 你如何使YUI同步/阻塞XMLHttpRequest
- 6. 查找阻塞調用
- 7. 異步/非阻塞查詢中的SQLDeveloper
- 8. 如何在Julia中使用回調進行異步Web查詢?
- 9. 如何使用MongoDb Scala驅動程序進行同步查詢
- 10. Python線程阻塞進一步執行
- 11. 多個異步調用阻塞
- 12. 非阻塞同步AJAX
- 13. 阻止使用索引進行查詢
- 14. 使API調用阻塞nodejs
- 15. 阻塞和不阻塞子進程調用
- 16. 如何使用異步servlet +非阻塞IO進行文件下載?
- 17. 將異步任務與阻塞同步任務混合使用
- 18. 如何使用異步回調進行同步操作?
- 19. 如何使用異步事件管理線程阻塞和解除阻塞?
- 20. WCF阻塞調用
- 21. Python子進程調用阻塞
- 22. 同步方法執行時,非同步方法是否阻塞
- 23. 使用Ajax進行異步PHP查詢?
- 24. 如何使用loopJ SyncHttpClient進行同步調用?
- 25. 如何使用jaydata進行同步調用
- 26. 在同步內進行異步調用
- 27. C#同步進行異步調用
- 28. 如何執行重同步操作W/O阻塞UI?
- 29. 將異步/回調方法轉換爲阻塞/同步方法
- 30. AsyncHttpClient可以執行非阻塞異步HTTP調用嗎?
很好的評論:但它是野獸的本性......懷疑這是一隻野獸,雖然:) – luigi7up
所以沒有辦法重用代碼?即有一個函數可以進行pg查詢並返回結果,因此我可以從不同的地方調用該函數。這可能嗎?謝謝 –
是的......這是迄今爲止我寫過的最醜陋的Postgres代碼。但+1正確的答案。 – sudo