NodeJs / Bluebird – 不断收到拒绝错误

正在build立一个监听TCP连接的守护进程>发送命令>监听事件

所以我决定使用蓝鸟来摆脱所有的callback..但我有一个问题…我似乎无法赶上拒绝的错误….我不知道什么是错的,这里是我的代码

承诺:

function exec(cmd, params, options) { return new Promise(function(resolve, reject) { server.send(cmd, params || {}, options || [], function (err, res, rawRes) { if (err) reject(err.msg); resolve(res); }); }); } 

执行:

 exec("login", { // lOGIN client_login_name: conf.user, client_login_password: conf.pass }).then(exec("use", { // SELECT SERVER sid: 4 })).then(exec("clientupdate", { // CHANGE NICKNAME client_nickname: conf.nick })).catch(function (err) { log.error(err); }); 

错误(服务器未运行)是reject(err.msg)的错误:

 Unhandled rejection Error: server is not running at Object.ensureErrorObject (D:\DEV\node\a90s\node_modules\bluebird\js\main\util.js:261:20) at Promise._rejectCallback (D:\DEV\node\a90s\node_modules\bluebird\js\main\promise.js:465:22) at D:\DEV\node\a90s\node_modules\bluebird\js\main\promise.js:482:17 at Object.cb (D:\DEV\node\a90s\modules\ts3interface.js:20:26) at LineInputStream.<anonymous> (D:\DEV\node\a90s\node_modules\node-teamspeak\index.js:170:47) at LineInputStream.emit (events.js:107:17) at LineInputStream._events.line (D:\DEV\node\a90s\node_modules\node-teamspeak\node_modules\line-input-stream\lib\line-input-stream.js:8:8) at Array.forEach (native) at Socket.<anonymous> (D:\DEV\node\a90s\node_modules\node-teamspeak\node_modules\line-input-stream\lib\line-input-stream.js:36:9) at Socket.emit (events.js:107:17) at readableAddChunk (_stream_readable.js:163:16) at Socket.Readable.push (_stream_readable.js:126:10) at TCP.onread (net.js:538:20) 

提前致谢 :)

您必须将callback传递给。然后,不是承诺(您的exec调用返回)。

 exec("login", { // lOGIN client_login_name: conf.user, client_login_password: conf.pass }).then(function(loginresult) { // SELECT SERVER return exec("use", { sid: 4 }); }).then(function(selectresult) { // CHANGE NICKNAME return exec("clientupdate", { client_nickname: conf.nick }); }).catch(function (err) { log.error(err); }); 

在你的第一个代码示例中,你正在做rejectresolve 。 这两个函数都在运行,我相信这会导致你所看到的错误。

改变它是这样的,它应该工作。

 if (err) { reject(err); } else { resolve(thing); } 

试试看,让我们知道它是如何工作的。