传递promise回调方法的更好方法
A better way to pass along promise callback methods
我看到自己通过了解析并拒绝了很多方法:
function createChangeRequest(contactId) {
return $q(function (resolve, reject) {
parseAPI.runCloud('createChangeRequest', {contactId: contactId}, resolve, reject);
});
}
然后在目标函数中调用它们:
function runCloud(methodName, params, resolve, reject) {
Parse.Cloud.run(methodName, params, {
success: function (response) {
// obtained secret string
console.log(methodName + ' response -> ', response);
resolve(response);
},
error: function (error) {
// error
console.log(methodName + ' error -> ', error);
reject(error);
}
});
}
它解决了我使用不同promise语法的需求。我觉得还有更好的方法。有吗?
它会支持高级流吗:
function updateItem(itemId, className, json, resolve, reject) {
return getItem(className, itemId).then(function (item) {
return saveItem(item, json);
});
}
您不应该手动创建和解析新的promise。Parse.cloud.run已经返回了一个promise对象,因此您应该以更简单的方式组织代码。类似这样的东西:
function createChangeRequest(contactId) {
return parseAPI.runCloud('createChangeRequest', {contactId: contactId}).then(function(response) {
console.log(response);
})
.catch(function() {
console.log('Error ocurred');
});
}
function runCloud(methodName, params, resolve, reject) {
return Parse.Cloud.run(methodName, params);
}
最好通过将其他promise语法"转换"为$q
promise来尽可能地隔离它们。然后在其他任何地方使用常规$q
语法。在您的情况下,假设Parse。云与显式回调一起工作,我会这样做:
function runCloud(methodName, params) {
var deferred = $q.defer();
Parse.Cloud.run(methodName, params, {
success: function (response) {
// obtained secret string
console.log(methodName + ' response -> ', response);
deferred.resolve(response);
},
error: function (error) {
// error
console.log(methodName + ' error -> ', error);
deferred.reject(error);
}
});
return deferred.promise;
}
然后,在runCloud
函数的所有用户中,您可以切换到常规的$q
语法,如下所示:
function createChangeRequest(contactId) {
parseAPI.runCloud('createChangeRequest', {contactId: contactId}).then(function(result){
//do something with result
});
}
相关文章:
- 有没有更好的动手、具体的方法来学习Javascript
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- 在JavaScript中拆分日期字符串的更好方法是什么
- 设置嵌套对象属性的更好方法
- 用Javascript重新格式化复杂文本日期字符串的更好方法
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- 什么'这是从第三个函数上的async 1st函数获得结果的更好方法
- 将数组从javascript格式化为php的更好方法,反之亦然
- jquery:将动画绑定到滚动条位置的更好方法
- 有更好的方法吗?(递归解析HTML unicode实体)
- 使用较少代码隐藏和显示选择菜单内容的更好方法是什么?javascript
- 编写if-else语句的更好方法
- 我能从“;输入“;事件是否有更好的方法来跟踪文本更改
- 有没有更好的方法可以测量从Ajax调用返回数据所需的总时间
- 有没有更好的方法将音频与视频同步(只需将其放在视频中即可)
- 调用影子原型方法的更简单/更好的方法
- 有没有更好的方法来编写这个Show/hide JQuery代码
- AngularJS:有没有比指定的方法更好的方法来实现这一点
- 哪种验证方法更好
- 哪一种定义变量的方法更好?为什么?