Dec*_*ter 2 javascript promise
我刚开始在Javascript中使用promises,我想知道是否有办法减少then函数中包装每个回调的样板代码?我发现自己做了很多,并想知道是否有更好的方法
例如,在我的getSettings下面的函数中,它从数据库(then)或默认设置模型(catch)返回设置模型.
var getSettings = function(instance, id, mode) {
return findByInstance(instance)
.then(function(data) {
return useModelFromData(data, id, mode);
})
.catch(function() {
return useDefaultModel(id, mode)
});
};
var useModelFromData = function(data, id, mode) {
var settings = data.model.settings;
applyFeatures(settings, id, mode);
return data.model;
};
var useDefaultModel = function(id, mode) {
var model = myModel.getDefaultModel();
applyFeatures(model.settings, id, mode);
return model;
};
Run Code Online (Sandbox Code Playgroud)
我知道如果当时的回调接受一个参数并返回一个值,你可以执行以下快捷方式:
get('some_url').then(JSON.parse).then(function(response) {
console.log("response", response);
});
Run Code Online (Sandbox Code Playgroud)
我可以为多个参数做任何捷径吗?
使用bind并移动参数列表
var getSettings = function(instance, id, mode) {
return findByInstance(instance)
.then(useModelFromData.bind(null, id, mode))
.catch(useDefaultModel.bind(null, id, mode));
};
var useModelFromData = function(id, mode, data) {
var settings = data.model.settings;
applyFeatures(settings, id, mode);
return data.model;
};
var useDefaultModel = function(id, mode) {
var model = myModel.getDefaultModel();
applyFeatures(model.settings, id, mode);
return model;
};
Run Code Online (Sandbox Code Playgroud)
使用bind,您可以在执行函数时将参数设置为参数列表的前缀.所以在这种情况下id,mode将获得传递给useModelFromData和的参数useDefaultModel
| 归档时间: |
|
| 查看次数: |
2888 次 |
| 最近记录: |