Node.js 同步NodeJs(或其他服务器端JS)调用

Node.js 同步NodeJs(或其他服务器端JS)调用,node.js,Node.js,我们使用Node进行开发,95%的代码是异步的,工作正常 大约5%(一个小模块),本质上是同步的[并且依赖于其他第三方软件] 我们正在寻找 1.“在回拨完成之前阻止的代码” 2.一次只能执行function1+的一个实例及其回调 PS 1:我完全同意,节点是用于异步工作的,我们应该避免这种情况,但这是独立的非实时过程 PS 2:如果没有任何其他服务器端JS框架?最后一个选择是使用其他类似于python的语言,但如果JS中有任何可能的话,我们准备试一试 有很多选择、查看、异步支持等。应该可以解决您

我们使用Node进行开发,95%的代码是异步的,工作正常

大约5%(一个小模块),本质上是同步的[并且依赖于其他第三方软件]

我们正在寻找 1.“在回拨完成之前阻止的代码” 2.一次只能执行function1+的一个实例及其回调

PS 1:我完全同意,节点是用于异步工作的,我们应该避免这种情况,但这是独立的非实时过程


PS 2:如果没有任何其他服务器端JS框架?最后一个选择是使用其他类似于python的语言,但如果JS中有任何可能的话,我们准备试一试

有很多选择、查看、异步支持等。

应该可以解决您的问题

有关同步模块的概述,请参阅

我想为它做一个插件,因为我是它的维护者。您可以使用像Seq这样的解决方案,但一般来说,您将通过函数调用来编码控制流。我发现这种方法很难编写和维护。IcedOfficeScript使简单的顺序操作变得轻而易举:

console.log "hello, just wait a sec"
await setTimeout defer(), 100
console.log "ok, what did you want"
但更重要的是,它处理异步代码和标准控制流的任意组合:

console.log "Let me check..."
if isRunningLate()
  console.log "Can't stop now, sorry!"
else
  await setTimeout defer(), 1000
  console.log "happy to wait, now what did you want?"
resumeWhatIWasDoingBefore()
循环也可以正常工作,这里是串行调度:

for i in [0...10]
   await launchRpc defer res[i]
done()
await
   for i in [0...10]
      launchRpc defer res[i]
done()
这是并行调度:

for i in [0...10]
   await launchRpc defer res[i]
done()
await
   for i in [0...10]
      launchRpc defer res[i]
done()

ICS不仅使异步代码的顺序链更加平滑,还鼓励您尽可能多地并行执行。如果您需要更改代码或并发性要求,那么更改是最小的,而不是完全重写(就像在标准JS/CS或某些并发库中一样)。

我尝试了async.series,但它没有等待回调。任何小前妻都会帮上大忙的!SEQ等待,直到最后一次回调调用SEQ.this(err,params)SEQ().SEQ(函数(){mysql.query(“select*from foo”,[],函数(err,rows,fields){this(null,rows);})