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的问题提供任何答案。