javascript - Node.js Bluebird Promise 提示 "Converting circular structure to JSON"

标签 javascript node.js bluebird

为了进行传出 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/

相关文章:

mysql - promise 自定义方法

javascript - Bluebird.JS Promise : new Promise(function (resolve, reject){}) vs Promise.try(function(){})

javascript - 使用 jQuery 更改 h5 元素中的文本

javascript - 在 Meteor Web 应用程序中显示多维数据库文档

node.js - PM2——其他用户编辑时 watch 不工作

javascript - 如何从 Node 后端的 $http.post/angular 检索 post 变量?

node.js - Nodejs 的 Passport 身份验证选项

javascript - Cordova IOS 应用程序,失去使用 window.localStorage 存储的值(value)

javascript - 无法禁用Electron JS中的全屏和窗口大小块

javascript - Promise.settle 和 promise 履行与拒绝