如何使用Node.js进行asynchronousAPI调用?

我有这个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)))

堆栈跟踪指向uuid包内的以下函数 (内部request用于生成多部分分隔符):

 var rb = require('crypto').randomBytes; function rng() { return rb(16); }; 

crypto.randomBytes()在这里同步调用,这就是为什么你会得到警告。

但是,这并不一定意味着这个代码会通过阻塞事件循环而导致大问题。 当然,它是同步的,所以阻塞,但是为了把事情放在一个angular度来看,我的笔记本电脑每秒可以产生大约300K的UUID(上面的函数被称为每个)。

这意味着事件循环将被阻塞大约3.3微秒的每个调用,在request的情况下,每个请求(我认为)是一次。 这是微不足道的。