【发布时间】:2019-09-02 14:36:38
【问题描述】:
对于普通的 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 这样的查询构建器?似乎没有办法阻止 promise 执行?
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 在推迟执行的计划背后做了什么魔术?
【问题讨论】:
-
如果你认为这是一种攻击,那么我很抱歉 - 我会删除它 - 也许你应该意识到你不是唯一一个有时会使用错误单词或单词的人
标签: javascript asynchronous promise knex.js