自定义节点同步function

节点提供了两种风格的核心function,同步和asynchronous。

fs.readFileSync这样的同步function对启动应用程序非常有用,例如在npm包dotenv中。

是否有可能编写一个自定义Sync函数,不需要asyncawait关键字,从而绕过承诺和callback地狱?

是否有可能编写一个自定义Sync函数,不需要asynchronous和等待关键字,从而绕过承诺和callback地狱?

是。 只有该函数只使用它调用的任何API函数的同步版本。

如果函数必须使用asynchronousAPI函数或模块,那么不行,你不能(很容易)制作你自己的同步版本(你也不想)。 你可以启动一个单独的subprocess来完成asynchronous工作,并同步等待( execSyncspawnSync )…(我不记得具体细节,但是至less有一个npm模块出于某种原因。 ..)


…但是它们不能用于类结构或更典型的server.js应用程序的起点…

是的,他们可以,在这两种情况下。 这是一个例子:

 function somethingAsync() { return new Promise(resolve => { setTimeout(resolve, 400, Math.floor(Math.random() * 10)); }); } // Using async/await in a class: class Example { async doSomething() { let a = await somethingAsync(); return a * 2; } } // Using async/await in a top-level script: (async () => { try { const ex = new Example(); console.log("Waiting..."); const v = await ex.doSomething(); console.log(v); } catch (e) { console.error("Error: ", e); } })();