Javascript NodeJs/Bluebird-不断获取未处理的拒绝错误
我正在构建一个监听TCP连接>发送命令>监听事件的守护进程 所以我决定使用bluebird来消除所有回调。。但是我有个问题。。。我似乎抓不到被拒绝的错误。。。。我不知道怎么了这是我的密码 承诺:Javascript NodeJs/Bluebird-不断获取未处理的拒绝错误,javascript,node.js,promise,bluebird,Javascript,Node.js,Promise,Bluebird,我正在构建一个监听TCP连接>发送命令>监听事件的守护进程 所以我决定使用bluebird来消除所有回调。。但是我有个问题。。。我似乎抓不到被拒绝的错误。。。。我不知道怎么了这是我的密码 承诺: function exec(cmd, params, options) { return new Promise(function(resolve, reject) { server.send(cmd, params || {}, options || [], function
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);
});
错误(服务器未运行)是拒绝(err.msg)
中的错误:
未处理的拒绝错误:服务器未运行
在Object.ensureErrorObject(D:\DEV\node\a90s\node\u modules\bluebird\js\main\util.js:261:20)
在Promise.\u拒绝回调(D:\DEV\node\a90s\node\u modules\bluebird\js\main\Promise.js:465:22)
位于D:\DEV\node\a90s\node\u modules\bluebird\js\main\promise.js:482:17
在Object.cb(D:\DEV\node\a90s\modules\ts3interface.js:20:26)
在LineInputStream。(D:\DEV\node\a90s\node\u modules\node teamspeak\index.js:170:47)
在LineInputStream.emit(events.js:107:17)
在LineInputStream.\u events.line(D:\DEV\node\a90s\node\u modules\node teamspeak\node\u modules\line input stream\lib\line input stream.js:8:8)
at Array.forEach(本机)
在插座上。(D:\DEV\node\a90s\node\u modules\node teamspeak\node\u modules\line input stream\lib\line input stream.js:36:9)
在Socket.emit(events.js:107:17)
在readableAddChunk(_stream_readable.js:163:16)
在Socket.Readable.push(_stream_Readable.js:126:10)
在TCP.onread(net.js:538:20)
提前感谢:)在您的第一个代码示例中,您正在执行
拒绝
和解决
。这两个函数都在运行,我相信这会导致您看到的错误
把它改成这样,它应该会工作
if (err) {
reject(err);
} else {
resolve(thing);
}
尝试一下,让我们知道它是如何工作的。您必须将回调传递给
。然后
,而不是承诺(您的exec
调用将返回)
您应该执行
reject(err)
和console.log(err.msg)
,而不是使用字符串进行拒绝。@Bergi我在发布之前对其进行了更改,这与我收到的错误相同,但从未处理的拒绝错误开始:[object object]
仍然……这是一个很好的观点:“拒绝”不是“返回”--您必须使用“else”
if (err) {
reject(err);
} else {
resolve(thing);
}
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);
});