簡體   English   中英

knex.js何時執行/解決“承諾”查詢?

[英]When are knex.js queries “promises” executed/resolved?

使用常規的Promise,一旦當前代碼停止運行,Promise就會盡快解決。 考慮以下偽代碼:

const p = SomePromiseDoingLoad();
calculatethings();
await sleepPromise();
//during sleep the promise p might/will have resolved already.
await p; //awaiting just makes *sure* the promise is already executed

但是,這如何轉換為像knex這樣的查詢生成器? 似乎沒有辦法阻止承諾的執行?

const p = knex.select('*').from('table');
//p could be executed now already.
const data = await gatherDataFromWebsite();
//p most probably will have resolved??
p.limit(data.limit) // ???

上面會發生什么,進一步如何防止這種情況發生呢? 畢竟始終允許節點盡快解決諾言,因此僅鏈接點就可以解決它嗎?

const p = knex.select('*').from('table').limit(5); 
let q = knex.select('*');
q = q.from('table');
q = q.limit(5);

還是knex在推遲執行計划的背后做了什么魔術?

僅當您在查詢對象上調用.then()時,Knex才執行網絡I / O。 只要您尚未在查詢對象上調用.then() ,它就會簡單地鏈接並返回查詢對象而不是Promise。

await關鍵字在內部調用Promise的.then()方法,因此將awaitknex查詢對象一起使用也會導致其返回promise。

它不會延遲執行。 而是由查詢對象(不是Promise) .then()方法觸發執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM