Ich bin neu in nodejs
und mit promise
und eigentlich ist dies meine erste echte App mit nodejs
.Nodejs Versprechen für benutzerdefinierte API
So habe ich den ganzen Tag gelesen und ich bin ein bisschen verwirrt.
Das ist also mein Modul:
function User() {
var self = this;
self.users = {};
self.start = function (user, botId) {
return new Promise(function() {
return get(user).then(function (data) {
debug(data);
if (data.botId.indexOf(botId) === false) {
return Repo.UserBotModel.addUser(user.id, botId).then(function() {
data.botId.push(botId);
return data;
});
} else
return data;
});
});
};
self.getDisplayName = function (user) {
if (user.real_name)
return user.real_name;
if (user.last_name)
return user.firstname + ' ' + user.last_name;
return user.first_name;
};
/**
* check if user exist in our database/memory cache and return it,
* otherwise insert in the database and cache it in memory and the return it
* @param user
*/
function get(user) {
return new Promise(function() {
//check if user is loaded in our memory cache
if (self.users.hasOwnProperty(user.id))
return self.users[user.id];
else {
//get from database if exist
return Repo.UserModel.get(user.id).then(function (rows) {
if (rows && rows.length) {
//user exist cache it and resolve
var data = rows[0];
if (data.botId && data.botId.length)
data.botId = data.botId.split(',');
else
data.botId = [];
self.users[user.id] = data;
//------------------------------ code execution reaches here
return data;
}
else {
//user dose not exist lets insert it
return Repo.UserModel.insert(user).then(function (result) {
return get(user);
});
}
});
}
});
}
}
Ich nenne die start
Methode Hexe die private get-Methode ruft der Anruf return data;
(markiert mit Kommentaren) erreicht aber then
Funktion Dosis wird in der start
Methode nicht ausgeführt ?? ?
Also was mache ich falsch?
UPDATE: Leider habe ich vergessen zu erwähnen, dass ich bluebird
und nicht die native promise
verwende, wenn das einen Unterschied macht?
'getDisplayName' sein sollte eine Methode von 'user' oder eine statische Funktion. – Bergi
Sie sollten das Versprechen selbst in "Benutzer", nicht den "Daten" -Wert zwischenspeichern - siehe [hier] (http://Stackoverflow.com/a/31820876/1048572) für ein Beispiel – Bergi