如何使用 Node.js 进行异步 api 调用?
How to make async api call with Node.js?
我在使用 node.js 时遇到了这个问题,我在启动我的应用程序时以及在我的 server.js 上进行 api 调用时使用节点 --trace-sync-io使用请求模块和请求承诺模块的文件,它仍然警告我正在使用 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
包内的 the following function(request
在内部使用它来生成多部分分隔符):
var rb = require('crypto').randomBytes;
function rng() {
return rb(16);
};
crypto.randomBytes()
在这里被同步调用,这就是你收到警告的原因。
然而,这并不一定意味着这段代码会通过阻塞事件循环而导致大问题。当然,它是同步的,所以是阻塞的,但从长远来看,我的笔记本电脑每秒可以生成大约 300K 个 UUID(上面的函数会为每个 UUID 调用)。
这意味着每次调用事件循环将被阻塞大约 3.3 微秒,在 request
的情况下,每个请求一次(我认为)。可以忽略不计。
我在使用 node.js 时遇到了这个问题,我在启动我的应用程序时以及在我的 server.js 上进行 api 调用时使用节点 --trace-sync-io使用请求模块和请求承诺模块的文件,它仍然警告我正在使用 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
包内的 the following function(request
在内部使用它来生成多部分分隔符):
var rb = require('crypto').randomBytes;
function rng() {
return rb(16);
};
crypto.randomBytes()
在这里被同步调用,这就是你收到警告的原因。
然而,这并不一定意味着这段代码会通过阻塞事件循环而导致大问题。当然,它是同步的,所以是阻塞的,但从长远来看,我的笔记本电脑每秒可以生成大约 300K 个 UUID(上面的函数会为每个 UUID 调用)。
这意味着每次调用事件循环将被阻塞大约 3.3 微秒,在 request
的情况下,每个请求一次(我认为)。可以忽略不计。