Javascript 建议如何减少冗余js代码
我有一堆自定义回调函数,可以由更通用的回调函数处理。我知道如何创建一个泛型函数来处理成功或失败的api调用,但是有没有一种方法可以通过自定义回调来实现呢?我会给自己一个处理回调的callApi的包装器或版本。这是一个包装器:Javascript 建议如何减少冗余js代码,javascript,Javascript,我有一堆自定义回调函数,可以由更通用的回调函数处理。我知道如何创建一个泛型函数来处理成功或失败的api调用,但是有没有一种方法可以通过自定义回调来实现呢?我会给自己一个处理回调的callApi的包装器或版本。这是一个包装器: //Links to jsfiddle must be accompained by code var customApi = { feeds: { getFeedActivities(feedName, feedId, callba
//Links to jsfiddle must be accompained by code
var customApi = {
feeds: {
getFeedActivities(feedName, feedId, callback) {
function good(data) {
return callback(data);
}
function bad(result) {
return callback(null);
}
var url = `${origin}/api/feeds/${feedName}/${feedId}`;
callApi(url, null, _GET, good, bad);
},
getUserFeedActivities(userId, callback) {
return getFeed('User', userId, callback);
},
followFeed(feedName, feedId, callback) {
function good(data) {
return callback(data);
}
function bad(result) {
return callback(null);
}
var url = `${origin}/api/feeds/${feedName}/${feedId}`;
callApi(url, null, _GET, good, bad);
}
},
media: {
uploadTemp: function(model, callback) {
function good(data) {
return callback(data);
}
function bad(result) {
return callback(null);
}
var url = origin + "/api/media?type=photo";
callApi(url, model, _POST, good, bad);
},
},
//
然后followFeed变成:
除了JSFIDLE之外,请使用[]工具栏按钮,这样您的问题的全部内容就在这里,人们不必离开现场就可以看到您问题的全部内容。例如:callApi看起来像什么?@t.J.Crowder没有更多的上下文。@Barmar::-|更糟糕。为什么要将callbackresult包装在函数中而不是直接回调给callApi?@NathanP.:这是防守。可以直接向callApi提供回调,但我们必须了解更多信息才能确定。在上面的例子中,回调肯定是用默认的this和一个参数调用的,这正是OP代码所做的。如果我们将其正确地传递给callApi,我们需要知道callApi也会这样做,或者回调不会注意它接收到的其他参数,也不关心这是什么。您可能已经看到了经典错误:[1,2,3].mapparseInt:-如果我们正确地将其传递给callApi,对不起,输入错误,如果我们将其直接传递给callApi,应该是这样的,我明白了;谢谢,我没有想到回调实现。
function callApi2(url, model, method, callback) {
return callApi(
url,
model,
method,
function(result) {
return callback(result);
},
function() {
return callback(null);
}
);
}
followFeed(feedName, feedId, callback) {
var url = `${origin}/api/feeds/${feedName}/${feedId}`;
callApi2(url, null, _GET, callback);
}