Javascript NodeJs/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

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

所以我决定使用bluebird来消除所有回调。。但是我有个问题。。。我似乎抓不到被拒绝的错误。。。。我不知道怎么了这是我的密码

承诺:

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);
});