摘录 u2013解析Javascript SDK提供了对大多数异步
方法jQuery兼容
模式的承诺,那么这意味着什么你看完后读了。
承诺是Javascript
程序中的下一个伟大范例,但理解它们为什么如此伟大并不简单,其
核心是承诺代表了一个可能完成并可能无法完成的
任务的结果。它可以用来登记回调
函数时承诺完成或失败,这基本上是提到CommonJS承诺 /例如建议..,我想
保存一个短语。对象,这是一个异步
操作,在旧的回调模式,你的代码可能会这样写:
object.save({键:值},{
成功:函数(对象){
对象被保存。
},
错误:函数(对象,错误){
对象失败。保存
}
});
在新的承诺范式中,同样的代码可以用这种方式编写:
object.save({键:值})。然后(
函数(对象){
对象被保存。
},
函数(错误){
对象失败。保存
});
有差别吗那有什么大不了的嗯,承诺的真正力量在于多个环节。当调用promise.then(
功能),一个新的希望回来了,它不会
执行直到最后一个。但这是一个特殊的
情况下。如果我的回调从那时返回一个新的承诺,那么返回的承诺在回调执行完成之前不会执行。
假设您为
登录编写代码,找到对象并更新它,在旧的回调范式中,您可以使用金字塔代码完成它:
Parse.User.logIn(
用户 成功:函数(用户){
Query.find({
成功:函数(结果){
结果{ 0 }。保存({键:值},{)
成功:函数(结果){
对象被保存。
}
});
}
});
}
});
这似乎很荒谬,更荒谬的是,没有错误的
处理方法,但是承诺链结构使代码看起来更舒服:
Parse.User.logIn(用户
Returnquery.find();
}然后(函数(结果){)
返回结果{ 0 }。保存({键:值});
}然后(函数(结果){)
对象被保存。
});
真的!它好多了!
错误处理
上面的代码不会在简单的时间段中添加错误处理,但是当你添加它时,你会
发现旧的回调代码一团糟:
Parse.User.logIn(用户
成功:函数(用户){
Query.find({
成功:函数(结果){
结果{ 0 }。保存({键:值},{)
成功:函数(结果){
对象被保存。
},
错误:函数(结果,错误){
发生错误。
}
});
},
错误:函数(错误){
发生错误。
}
});
},
错误:函数(用户,错误){
发生错误。
}
});
因为承诺知道处理是否完成,它可以传递错误,在遇到错误之前不执行任何回调:
Parse.User.logIn(用户
Returnquery.find();
}然后(函数(结果){)
返回结果{ 0 }。保存({键:值});
}然后(函数(结果){)
对象被保存。
}函数(错误){
有些错误。
});
一般来说,开发人员认为异步承诺失败等同于抛出异常。事实上,如果回调抛出错误,则承诺返回失败信息。
jQuery、主干和解析
有开发商的承诺,图书馆的多种实现。像jQuery的
延期,微软的WinJS。承诺,when.js,Q,和dojo.deferred。
不过,这里有一个有趣的地方可以理解,你可以在这里读到长而引人入胜的jQuery拉请求讨论,jQuery的实现并不完全符合承诺的规则A,A,以及许多其他的方法。During the experiment, I found that only one place is different.If a fault handler returns some other information instead of simply returning to a promise, most implementations will consider dealing with this error without making error propagation.However, jQuery does not think it is here to deal with the error, but to pass it forward.Although promise from different systems should be used seamlessly, you should pay attention to it.A potential problem is to return promises in the error processor (replace the original value), because they will be treated equally.
DoFailingAsync(),然后(函数(){()
不成功。 / / dofailingasync
}函数(错误){
处理错误。 /尝试
返回全部
都是OD;
}然后(函数(结果){)
非jQuery实现将以所有都达到此目的。
}函数(错误){
将以错误的方式到达这一点。
});
在骨干0.9.10
最新版本,异步方法现在返回一个jQuery jqxhr,一种承诺。解析Javascript SDK的一个
目标是兼容骨干尽可能。我们不能回到jqxhr,因为它不
工作,以及对云的代码,所以我们不加分析。承诺班,遵循jQuery递延标准最新版本的解析Javascript SDK更新了所有的异步方法来
支持这些新的对象,和旧的回调方法仍然是可用的,但对上述例子的基础上,我相信,你喜欢一个新的途径。所以试着承诺!