我有node.js这个问题,我在启动我的应用程序时使用了节点--trace-sync-io,当我使用请求模块和请求承诺模块在我的server.js文件上进行api调用时,它仍然警告我正在使用Sync API并指向我的request.promise调用的开始。
var request = require("request");
var rp = require("request-promise");
var options = {
uri: url,
json: true
};
rp(options).then(function (data){
//then I do something with data here
}.catch(function(err){
//catch errors here
})
因此,当我使用命令node --trace-sync-io server.js
启动节点时,我得到WARNING: Detected use of sync API
并堆栈跟踪
(node:17212) WARNING: Detected use of sync API
at rng (mypath\node_modules\uuid\lib\rng.js:7:10)
at v4 (mypath\node_modules\uuid\v4.js:13:52)
at Multipart (mypath\node_modules\request\lib\multipart.js:11:19)
at Request (mypath\node_modules\request\request.js:127:21)
at request (mypath\node_modules\request\index.js:54:10)
at mypath\server.js:333:8
at emitOne (events.js:96:13)
at emit (events.js:188:7)
at Query.handleReadyForQuery (mypath\node_modules\pg\lib\query.js:126:8)
指向我开始调用rp的行(options.then(function(data)))
答案 0 :(得分:1)
堆栈跟踪指向uuid
包内的the following function(request
内部用于生成多部分分隔符):
var rb = require('crypto').randomBytes;
function rng() {
return rb(16);
};
crypto.randomBytes()
在此处同步调用,这就是您收到警告的原因。
但是,这并不一定意味着此代码会通过阻止事件循环而导致严重问题。当然,它是同步的,所以阻塞,但是从透视的角度来看,我的笔记本电脑每秒可以产生大约300K UUID(上面的函数被调用每个)。
这意味着每个调用事件循环将被阻塞大约3.3微秒,在request
的情况下,每个请求一次(我认为)。这可以忽略不计。