代码之家  ›  专栏  ›  技术社区  ›  HostileFork says dont trust SE

同步需要,因此整个Node.js脚本不在回调中

  •  0
  • HostileFork says dont trust SE  · 技术社区  · 5 年前

    使用WebAssembly时,有onRuntimeInitialized()的回调。你基本上做不到 任何东西

    因此,如果你有一个在其中实现的库,你必须说:

    var mylib = require('mylib')
    mylib.onRuntimeInitialized = function() {
        ...
        // Anything that wants to use *anything* from mylib
        // (doesn't matter if it's synchronous or asynchronous)
        ...
    }
    

    好的一面是,您不会让Node等待执行任何可能不依赖mylib的初始化……所以其他模块可以执行抓取或任何它们需要的操作。从消极的方面来说,这是相当糟糕的人体工程学——特别是如果你所做的一切都依赖于这个库。

    var mylib = require('mylib')
    await mylib.Startup()
    

    write about how much they don't like the idea of top-level AWAIT . 我对这件事的看法是完全不相关的,因为这是不允许的。:-/

    那么,除了在回调中包装整个应用程序之外,真的没有办法在顶层保留代码吗?

    0 回复  |  直到 5 年前
        1
  •  1
  •   clay    5 年前

    require s将返回同一个对象,不管需要调用哪个文件。顺序确实很重要,但它在所有文件中都是相同的对象。

    所以主要是 index.js

    var myLib = require('mylib')
    myLib.libby = myLib.initialize()
    

    然后在另一个文件中, doesStuff.js ,您可以:

    const libby = require('mlib').libby
    module.exports = function doStuff() {
      /* do stuff with initialized libby object */
    }
    

    通常情况下,这种方法是调用 doStuff.js 在初始化所有内容并说明已处理web路由之前不会调用。所以你的服务器已经在运行了 libby 将初始化并在调用后准备使用。

    绝对不能失败 ,就像如果数据库连接不成功或其他情况,服务器将不会运行一样,那么等待是合适的,所以是的,您需要将所有内容(至少是操作的核心)包装在回调中,以便服务器知道何时可以安全启动。