我使用Angular 1.5并且我创建了一个工厂函数,它返回一个像这样的文字对象:
return {
item: null,
get: function() {
return item;
},
create: function() {
if (this.get()){
this.remove();
}
this.item = {};
},
remove: function() {
var item = this.get();
if (item) {
this.item = null;
}
},
add: function() {
if (!this.get()) {
this.create();
}
this.item.newprop = 'value';
}
}
请不要让我换成功能声明。我想要一个具有自己的动作(函数)和正在处理的属性的对象。
此模式(如get
内的create
等等......)我没有从任何地方复制过。所以我想知道是否有名字?这是处理功能黑盒的最佳方法吗?
将Promise放入内部的最佳方法是什么?所以每个函数都应该返回一个承诺
我需要使用的每个then
函数bind
???
create: function () { this.get() .then(remove) .then(function () { this.item = {}; // BUT this === undefined!! }); }
答案 0 :(得分:0)
你必须在每个回调函数中使用bind:
var myModule = {
item: null,
get: function() {
return Promise.resolve(this.item);
},
create: function() {
return this.remove().then(function() {
this.item = {};
}.bind(this));
},
remove: function() {
return this.get().then(function(item) {
if (item) {
this.item = null;
}
}.bind(this));
},
add: function() {
return this.get().then(function(item) {
return item || this.create();
}.bind(this)).then(function() {
this.item.newprop = 'value';
}.bind(this));
}
}
// Let see it working:
myModule.create().then(function() {
return myModule.get();
}).then(function(item) {
console.log("After create: ", item);
return myModule.remove();
}).then(function() {
return myModule.get();
}).then(function(item) {
console.log("After remove: ", item);
return myModule.add();
}).then(function() {
return myModule.get();
}).then(function(item) {
console.log("After add: ", item);
});