【发布时间】:2016-10-20 22:38:58
【问题描述】:
我有这三个基本上做同样事情的函数。他们从 Promise 中获取数据,并为每个函数创建一个具有相同属性的对象。
我想把它晒干:
var getFiles = function() {
return wg.getFiles().then(function(data) {
processData(data, {
type: "File",
title: x.filename,
created: x.Created,
path: x.path
})
})
}
var getEvents = function() {
return wg.getEvents().then(function(data) {
processData(data, {
type: "Event",
title: x.Title,
created: x.Created,
path: x.path
})
})
}
var getFeedback = function() {
return wg.getFeedback().then(function(data) {
processData(data, {
type: "Review",
title: "by " + x.Author,
created: x.Created,
path: x.path
})
})
}
var processData = function(data, props) {
var x = _(data)
.map(function(x) {return props})
.value()
.map(function(x) {
activties.push(x)
})
}
我想通过将processData 函数更改为类似这样的方式来解决这个问题:
var processData = function(data, props) {
var x = _(data)
.map(function(x) {
return {
type: x[props[0]],
title: x[props[1]],
created: x[props[3]],
path: "/" + x[props[4]]
}
})
.value()
.map(function(x) {
activties.push(x)
})
}
那么我可以这样称呼它:
var getFiles = function() {
return wg.getFiles().then(function(data) {
processData(data, ['filename', 'created', ['FileRef']['lookupValue']])
})
}
这就是我的想法,但如果有人有更好的建议,我很乐意。
【问题讨论】:
-
出于好奇,您认为您当前的方法有问题吗?当然,
processData()方法看起来有点难看,但为了让其他所有内容都可读,我会说它很好。 -
您可以颠倒您的 processData fn 中的参数顺序。从函数(数据、道具)到函数(道具、数据),然后根据需要从部分应用程序中受益。
-
@Archer 我不会说我认为有什么问题,但如果可能或足够简单来完成,我确实喜欢保持我的代码干燥。如果试图把它干掉会导致额外的 20 行代码,那么是的,这不值得付出努力。但如果它足够简单,我想学习如何做。
-
请注意我投票结束,因为这主要是基于意见的,我想说你所拥有的很好。
-
只是好奇,
x是什么,activities是什么?你为什么不return来自承诺的processData(…)的结果?您当前的代码似乎无法正常工作。
标签: javascript jquery object dry