我知道node.js我的代码运行在一个线程中,并且它不是并发的,但是我应该担心多个REST请求或setTimeout触发器导致的上下文切换吗?
换句话说,尽管不是并发,但node.js 异步是
例如,在以下代码中:
let a = 0;
const inc = () => new Promise(resolve => {
temp = number; // 1
number = temp + 1; // 2
resolve();
});如果我给inc打了10次电话,我最终会得到10,还是可以在标记为1和2的行之间进行上下文切换?
发布于 2020-06-02 11:39:16
您可以用NodeJS编写异步代码。
如果您有这样的代码,您将得到不确定的结果:
let a = 0;
new Promise((resolve, reject) => { /* do something */}).then(() => { a = 1; }).then(() => { /* more stuff */});
new Promise((resolve, reject) => { /* do something */}).then(() => { a = 2; }).then(() => { /* more stuff */});这两个承诺都将对全局变量a起作用,而且由于无法确定哪个变量将首先完成,因此无法知道a在这两个承诺中的价值。
最后一件事--因为你的问题使用了“担心”这个词,这让我相信这是你会想到的事情。如果是这样的话,有几种模式,比如函数式编程中的读写器模式或依赖注入,有助于减轻对竞争条件的担忧。这些都是任何语言中的良好实践(包括NodeJS),因此阅读它们可能会有帮助。
https://stackoverflow.com/questions/62151032
复制相似问题