背景:我试图创建一个完全异步节点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)
我的问题是: -
- 这是什么意思?检测到使用同步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
- 我的演示不完全异步吗?
您的演示完全异步,因为它不会调用任何同步API