为了进行传出 api 调用,我使用了包含在 bluebird Promise 对象中的 ReSTLer。但是,我在 node_modules/bluebird/js/main/promise.js
处收到可能未处理的 TypeError:将循环结构转换为 JSON
。
即使没有 JSON.stringify,也会发生这种情况。它发生在 Promise.js 级别。
对此我能做什么?
rest.postJson(uri, body).then(
function(response) {
console.log(response.access.token.id);
console.log(response.statusCode);
res.send(response.access.token.id);
}, function(error) {
console.log(error.statusCode);
res.send(JSON.stringify(error));
//res.send(error);
});
Possibly unhandled TypeError: Converting circular structure to JSON
at Object.stringify (native)
at ServerResponse.res.json (/home/one/try/cloudimageshare-monitoring/project/node_modules/express/lib/response.js:205:19)
at ServerResponse.res.send (/home/one/try/cloudimageshare-monitoring/project/node_modules/express/lib/response.js:121:21)
at /home/one/try/cloudimageshare-monitoring/project/app/scripts/proxy/proxies_express_module.js:39:29
at tryCatch1 (/home/one/try/cloudimageshare-monitoring/project/node_modules/bluebird/js/main/util.js:43:21)
at Promise$_callHandler [as _callHandler] (/home/one/try/cloudimageshare-monitoring/project/node_modules/bluebird/js/main/promise.js:627:13)
at Promise$_settlePromiseFromHandler [as _settlePromiseFromHandler] (/home/one/try/cloudimageshare-monitoring/project/node_modules/bluebird/js/main/promise.js:641:18)
at Promise$_settlePromiseAt [as _settlePromiseAt] (/home/one/try/cloudimageshare-monitoring/project/node_modules/bluebird/js/main/promise.js:804:14)
at Promise$_settlePromises [as _settlePromises] (/home/one/try/cloudimageshare-monitoring/project/node_modules/bluebird/js/main/promise.js:938:14)
at Promise$_rejectPromises [as _rejectPromises] (/home/one/try/cloudimageshare-monitoring/project/node_modules/bluebird/js/main/promise.js:931:10)
更新:以下是错误对象的键(如果有帮助):
[ '_readableState',
'readable',
'domain',
'_events',
'_maxListeners',
'socket',
'connection',
'httpVersion',
'complete',
'headers',
'trailers',
'_pendings',
'_pendingIndex',
'url',
'method',
'statusCode',
'client',
'_consuming',
'_dumped',
'httpVersionMajor',
'httpVersionMinor',
'upgrade',
'req',
'pipe',
'addListener',
'on',
'pause',
'resume',
'read',
'rawEncoded',
'raw' ]
最佳答案
没有。当您不将字符串传递给 express' res.send
时但是一个对象(如error
),它将在内部调用JSON.stringify
。这肯定不会在 promise.js
中发生(但是,Bluebird 对堆栈跟踪做了一些奇怪的事情)。尝试一下
res.send(error.message);
关于javascript - Node.js Bluebird Promise 提示 "Converting circular structure to JSON",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24683765/