我有两个功能。一个函数创建一个Ember延迟对象,并将其与一些数据一起发送到另一个函数。
该数据是否应该与延迟对象一起发送,并分开,还是应该附加到延迟对象并作为单个参数发送?
所以这里是一个功能的例子(不是逐字的,只是希望这个问题的一个明确的例子):
function startSomething(data) {
var defer = Ember.RSVP.defer();
defer.data = data;
defer.promise.then(
//pass
function(result) {
//do stuff
},
//fail
function(result) {
//do stuff
});
doOtherThing(defer);
}
function doOtherThing(defer) {
var data = defer.data;
//do something with the data
var result = //some result of messing with data
//if success
defer.resolve(result);
}
我首先创建延迟对象,然后在其上设置数据属性,然后将其发送到另一个函数。
更合适的做法是:
doOtherThing(defer, data);
或
doOtherThing(defer) //with data attached as a property
答案 0 :(得分:1)
虽然这可能主要是一种观点,但我认为大多数经验丰富的Javascript开发人员会同意,为data
传递一个单独的参数通常比将数据放在承诺上要好一些。宾语。
这根本不是一个特定于承诺的问题。如果您可以单独传递数据,则将其与不与之无关的对象分开。将外国数据放在您无法控制的对象上没有任何优势和许多可能的缺点。在您的特定情况下,如果promise实现已经具有名为.data
的属性或将来决定使用此类属性,该怎么办?你可能刚刚破解了实施。
在您的具体情况下,您可以将data
作为第二个参数传递:
function startSomething(data) {
var defer = Ember.RSVP.defer();
defer.promise.then(
//pass
function(result) {
//do stuff
},
//fail
function(result) {
//do stuff
});
doOtherThing(defer, data);
}
function doOtherThing(defer, data) {
//do something with the data
var result = //some result of messing with data
//if success
defer.resolve(result);
}
如果你有局限性并且由于某种原因只能传递一个参数(例如某个API接口只有一个上下文变量),你可以将promise和数据放在另一个对象上并传递该单个对象,解除引用承诺和您的数据分开,并仍然保持彼此分开。国际海事组织,这比将数据放在承诺上更为可取。