【发布时间】:2018-05-02 00:31:41
【问题描述】:
我遇到了 Node.js (v0.12.7) 的问题。我正在编写一个必须在某处停止的应用程序,并等待从查询到数据库的结果,然后它正在做什么。
而且问题并不像使用异步(系列等...)那么简单。我有多个相互调用的函数和模块。我尝试使用异步,但它没有解决我的问题。
具体来说,我有一个类似这样的方案:
db = require('db-utils');
exports.myFunction() {
// some code ...
while(condition) {
for(i from 0 to x) {
// code ...
if(condition) {
// code ...
db.executeCall(callback); // async with callback
// this where I want to stop waiting for result
// continue doing something with the result, in my case it is jumping,
// so I have a result = undefined
// code ..
}
// code ...
}
// code ...
}
// code ...
// calculating some properties of oResult from the db query result above
return oResult;
}
理想的情况,是将文件的所有内容作为顺序代码执行,但除了 db 调用之外,所有其他的都应该正常工作(我假设,一些 for,if,变量赋值,没什么特别的)。而且,我不能把所有的东西都放在回调中,因为在 if、for 和 while 之外还有一段代码……
我找到了 wait.for,但它似乎对我不起作用(并且该项目似乎已被放弃,因为上次提交是 2 年前:/)
【问题讨论】:
-
您能否更具体地说明为什么异步不适用于这种情况?您可以将所有“继续对结果进行操作”代码移动到回调函数中。
-
在导出函数的末尾(上面编辑的代码示例),我需要返回一个对象“oResult”,它将包含一些从数据库查询结果计算的值,所以,除非我可以把所有一些花哨的异步回调中的 while/for/if 块之外的代码,它不起作用:(
-
如果有人知道 Node 何时何地决定将一个函数搁置一旁,稍后再返回它会更清楚 :)
-
不,您不能 - 绝不能 - 阻止进程。只需使用
async.while和async.for -
这是个坏主意。节点,是javascript。 Javascript是单线程的。如果您阻止,服务器将被阻止并且将无法使用。这会导致糟糕的表现。
标签: javascript node.js asynchronous synchronous async.js