繁体   English   中英

NodeJs / Bluebird - 继续得到未处理的拒绝错误

[英]NodeJs/Bluebird - keep getting Unhandled rejection Error

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

所以我决定使用蓝鸟摆脱所有的回调..但我有一个问题...我似乎无法抓住一个被拒绝的错误....我不知道什么是错的这里是我的代码

承诺:

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)错误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)

提前致谢 :)

你必须将回调传递给.then ,而不是promises(你的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);
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM