最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

同步要求所以整个Node.js脚本不在回调中

IT培训 admin 4浏览 0评论

同步要求所以整个Node.js脚本不在回调中

使用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。我对它的看法无论如何都是无关紧要的,因为它是不允许的。 : - /

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

回答如下:

Node要注意的一点是,requires将返回相同的对象,无论调用哪个文件都需要。顺序确实很重要,但它将是所有文件中的同一个对象。

所以在你的主要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 */
}

通常,这种方式的工作原理是,在初始化所有内容并说出Web路由被处理之前,不会调用doStuff.js中的调用。所以你的服务器已经运行了,所以libby将被初始化,并且一旦被调用就可以使用了。

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

同步要求所以整个Node.js脚本不在回调中

使用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。我对它的看法无论如何都是无关紧要的,因为它是不允许的。 : - /

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

回答如下:

Node要注意的一点是,requires将返回相同的对象,无论调用哪个文件都需要。顺序确实很重要,但它将是所有文件中的同一个对象。

所以在你的主要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 */
}

通常,这种方式的工作原理是,在初始化所有内容并说出Web路由被处理之前,不会调用doStuff.js中的调用。所以你的服务器已经运行了,所以libby将被初始化,并且一旦被调用就可以使用了。

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

发布评论

评论列表 (0)

  1. 暂无评论