NodeJS - 使用“--trace-sync-io”获取“警告:检测到使用同步API”

问题描述 投票:1回答:1

背景:我试图创建一个完全异步节点js演示的小测试。然后,我可以看到一个好样本看起来像是为了清理我已经完成的其他项目。

继承我的代码

//https://medium.com/@tkssharma/writing-neat-asynchronous-node-js-code-with-promises-async-await-fa8d8b0bcd7c
function doubleAfter2Seconds(x) {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(x * 2);
    }, 500);
  });
}

function addPromise(x){
  return new Promise(resolve => {
    doubleAfter2Seconds(10).then((a) => {
      doubleAfter2Seconds(20).then((b) => {
        doubleAfter2Seconds(30).then((c) => {
          resolve(x + a + b + c);
      	})
      })
    })
  });
}

addPromise(10).then((sum) => {
  console.log(sum);
});

我得到的第一个(很多!)警告是在Node Debug Console中。

Debugger attached.
(node:29884) WARNING: Detected use of sync API

at realpathSync (fs.js:1437:13)
at toRealPath (internal/modules/cjs/loader.js:205:13)
at Module._findPath (internal/modules/cjs/loader.js:287:22)
at Module._resolveFilename (internal/modules/cjs/loader.js:600:25)
at Module._load (internal/modules/cjs/loader.js:529:25)
at Module.runMain (internal/modules/cjs/loader.js:775:12)
at startup (internal/bootstrap/node.js:300:19)

我的问题是: -

  1. 这是什么意思?检测到使用同步API
  2. 我的演示不完全异步吗?
javascript node.js
1个回答
2
投票
  1. 这是什么意思?检测到使用同步API

trace-sync-io检测对节点同步API的调用,如fs.readFileSync。所以这些警告就是你想要抓住的

为了执行您的代码,Node必须同步加载您的文件。当你require文件时,会发生同样的事情。因此,预计会有很多这样的警告:

(node:29884) WARNING: Detected use of sync API at realpathSync (fs.js:1437:13)

您可以使用空文件尝试它,您将看到相同的警告:node --trace-sync-io empty-file.js

  1. 我的演示不完全异步吗?

您的演示完全异步,因为它不会调用任何同步API

© www.soinside.com 2019 - 2024. All rights reserved.