给出一个在Javascript中使用承诺的详细例子

给出一个在Javascript中使用承诺的详细例子
摘录 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更新了所有的异步方法来支持这些新的对象,和旧的回调方法仍然是可用的,但对上述例子的基础上,我相信,你喜欢一个新的途径。所以试着承诺!

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部