Javascript 可能的承诺问题

Javascript 可能的承诺问题,javascript,node.js,sockets,promise,bluebird,Javascript,Node.js,Sockets,Promise,Bluebird,嗨,这是第一次执行,但当我再次尝试时,它似乎破裂了,这里使用的承诺有什么问题吗 socket.on('new user', function(data, callback) { return getUsersFromDb() .then(function() { if (users.name.indexOf(data) > -1) { callback(false); reject(err);

嗨,这是第一次执行,但当我再次尝试时,它似乎破裂了,这里使用的承诺有什么问题吗

    socket.on('new user', function(data, callback) {
    return getUsersFromDb()
    .then(function() {
        if (users.name.indexOf(data) > -1) {
            callback(false);
            reject(err);
        } 
        else {
            callback(true);
            // socket.nickname = data;
            // people[socket.nickname] = socket;
            updateNicknames();
            var user = new User();
            user.name = data;
            user.save(function(err, data) {
                if (err) {
                    console.log(err)    
                }
                else {
                    return getUsersFromDb()
                    .then(function() {
                        updateNicknames()
                    })
                    .catch(function(e) {
                        console.log("Error", e)
                    })
                }
            });
            socket.broadcast.emit('user join', {nick: socket.nickname});
        } 
    })
    .catch(function(e) {
        console.log("Error", e)
    })
});

Sublime似乎对then和catch进行了不同的着色,好像它被错误地使用了一样

我假设下面的函数返回了一个承诺

getUsersFromDb()

您是否尝试过jQuery promise,使用$.when(functionWhichReturnsAPromise())。然后(“代码的其余部分”)?

socket变量是什么?它是socket.io连接吗?还是普通的插座连接?另外,为什么要调用
reject(err)
。哪里定义了
reject()
?还有,为什么您认为
socket.on()
回调函数的第二个参数是回调函数本身?
updateNicknames()
做什么?当它不工作时,你做了什么调试?你知道它的代码路径吗?你会犯什么错误?这听起来像是你需要先进行基本调试,这样你就可以准确地告诉我们代码哪里出错了。你的代码真的需要重构,你返回什么?如果您有多个异步调用,那么您应该向then传递一个承诺,并首先将它们链接起来,这是服务器端代码(因此jQuery并不真正合适)。其次,没有理由使用带有单个承诺的
$.when()
。您可以直接调用
.then()
,您已经做出了承诺。这似乎并没有为OP的问题提供任何答案。