Q.set
Используется для увеличения объекта в будущем, и он не возвращает расширенный объект (фактически, он ничего не возвращает). Вот почему вы получаете undefined
в console.log
.
Вы должны использовать его как этот
var obj = {
foo: "bar"
};
Q(obj).set("foo", "baz").then(function() {
console.log(obj);
});
Это напечатает
{ foo: 'baz' }
Свойство foo
установлен как baz
в obj
и, поскольку она передается по обещанию цепи, нам нужно для его явной печати.
Вы можете использовать функцию сестра, Q.get
, как это
Q(obj).set("foo", "baz").then(function() {
return Q.get(obj, 'foo');
}).then(console.log);
Вы можете быть удивлены, почему вы не можете сделать
Q(obj).set("foo", "baz").get('foo').then(console.log);
Это не будет работать, из-за той же причине почему set
не работал во-первых. set
не разрешается с измененным объектом. Вот почему нам нужно явно получить его от фактического объекта.
FWIW, я нашел это, set
не будучи в цепочке, немного странно. Итак, I submitted a pull request to the Q library, чтобы изменить это, и оно было отклонено.