Bal*_*ala 2 javascript promise ember.js
开始学习Ember之后,只要有对Promise Object的引用,我就会感到困惑.我知道对象,例如类X的实例或JSON对象.例如,当有人说该方法m返回一个JSON对象时,我知道期望键值对.我如何将这种理解与承诺对象联系起来?promise对象是一个值(可以是数组,字符串,数字,JSON对象等)?
如果方法返回promise对象,我应该期待什么?
承诺是一种新的对象类型的EcmaScript 6(ES6),其中有许多polyfill和libaries(即ES5 JavaScript引擎的实现),并允许(以及其他好处)摆脱臭名昭着的回调地狱,并写并轻松读取异步代码.
承诺可以有这三种状态中的一种(也是唯一一种):
如果承诺被拒绝或履行,它也具有已解决的状态.
基本上,它是一个具有then属性(以及其他)的对象,它function至少将一个函数作为参数,并且可以取两个:如果promise返回一个满足状态,则第一个将被调用,第二个将被调用如果promise返回被拒绝状态,将调用一个
该then函数返回另一个承诺,因此promises是可链接的.
Promise对象比我刚才写的更复杂,但它只是为了给你一个开始.
顺便说一下,如果你使用jQuery ,你可能已经使用了一个类似promise的对象(注意类似的后缀):$.ajax()返回一个类似于promise的对象(那些被称为thenable s),它有一个done(和一个then)属性,function它接受一个函数作为参数似乎是一个fulfilled函数(一般需只有一个参数).Promise对象也可能有一个done函数属性(不是标准化的,AFAIK,但几乎所有的polyfill和库都实现了它),它就像then函数一样,只是它没有返回一个promise(因此名字:如果你完成了承诺,然后使用done(),但如果你需要做一些承诺的结果,使用then()).
例如:你可能已经看过或写过这样的东西:
$.ajax({url: '/path/to/html/piece'})
.done(function(data) {
$('whateverSelector').html(data);
});
Run Code Online (Sandbox Code Playgroud)
但是jQuery所谓的承诺,即使它们是可靠的,也不符合承诺规范.
Promise 对象正如其名称所示——一个 Promise。在 Ember 和 Angular 等前端框架中,promise 是异步调用返回的对象。此调用不会阻塞整个系统,而是返回一个承诺,该承诺最终将包含异步调用返回的数据。
Promise 有一个名为“resolve”的事件,当响应到来时会触发该事件。这就是为什么 Promise 对象有通常称为 的方法then。你可以像这样使用它(在 Ember.js 文档之后):
var promise = fetchTheAnswer();
promise.then(fulfill, reject);
function fulfill(answer) {
console.log("The answer is " + answer);
}
function reject(reason) {
console.log("Couldn't get the answer! Reason: " + reason);
}
Run Code Online (Sandbox Code Playgroud)
当您的请求得到满足时,promise 将以 (response) 作为参数调用该方法fulfill,answer当请求被拒绝时(即当资源不存在时),它将reject以reason(error) 作为参数调用方法。
此类对象与其他 OO 语言(如 java)中的对象类似 - 它们包含数据和可以调用它们的方法。
| 归档时间: |
|
| 查看次数: |
723 次 |
| 最近记录: |