-1
socket.on('new video', function(data) {
console.log("New video")
var addToCueP = Promise.promisify(addToCue)
var getCueFromDbP = Promise.promisify(getCueFromDb)
addToCueP(data.id, socket.nickname)
.then(function() {
return getCueFromDbP();
})
.then(function() {
console.log("Emit change video")
io.sockets.emit('change video', {id: data.id, title: data.title, nick: socket.nickname});
})
});
我使用藍鳥的承諾,但我有問題,該addToCue函數被調用,但其他功能後,例如getCuefromDb和插座發射器的心不是讓觸發,有沒有人有任何想法我要去哪裏錯了?Bluebird.js無極不是鏈接。那麼()■
addToCue()
var addToCue = function(id, user) {
console.log("Add to cue")
var video = new Video();
video.id = id;
video.user = user;
video.save(function(err, data) {
if (err) {
console.log(err)
} else {
return true
}
});
}
getCueFromDb()
var getCueFromDb = function(callback) {
Video.find({}).exec(function(err, videos) {
if (err) {
return err;
}
if (videos.length) {
cue = []; // empty array
videos.forEach(function(video) {
cue.push(video.id) // push all the videos from db into cue array
});
io.sockets.emit('send cue', {cue: cue});
console.log("getCueFromDb", cue)
if (callback) {
callback();
return
}
else {
return
}
}
else {
cue = [];
io.sockets.emit('send cue', {cue: cue});
console.log("getCueFromDb (no videos)", cue)
if (callback)
callback()
else
return
}
})
}
'addToCue()'和'getCueFromDb()'的簽名是什麼?如果你已經在使用Promises,爲什麼你必須提供這些功能?他們爲什麼不回諾言? – Thomas
他們只是正常的功能,但我希望他們按此順序執行我認爲這是正確的方式去了解它而不是回調我錯了嗎? – julianmp
你沒有處理錯誤,從你描述的一個可能的情況是'addToCueP'拋出或拒絕有錯誤 – Srle