我希望用JavaScript Promises替换我现有的一些代码,我只想确认我做错了(或者有更好的方法)。我正在使用es6-promise库。
我所拥有的是我使用JavaScript Promises更新的三个函数(以前是嵌套的,回调函数混乱)。这些函数实际上应该具有双模式,即我可以像常规函数一样使用它们并让它们返回结果,或者我可以将它们链接在一起。
function func_1()
{
return new Promise(function(resolve, reject){
if(condition)
{
resolve('1');
}
else
{
console.log('start');
resolve(ajaxRequest(url));
}
});
}
function func_2(data)
{
return new Promise(function(resolve, reject){
if(condition)
{
resolve('2');
}
else
{
console.log(data.response);
resolve(ajaxRequest(url));
}
});
}
function func_3(data)
{
return new Promise(function(resolve, reject){
if(condition)
{
resolve('3');
}
else
{
console.log(data.response);
resolve(ajaxRequest(url));
}
});
}
func_1().then(func_2).then(func_3).then(function(data){});
if
用于检查数据是否缓存在localStorage / sessionStorage中,如果是,则该函数只返回结果。但是,在我不确定值是否已被缓存的情况下(例如,首次运行脚本),我计划将它们链接起来,然后让每个后续函数将其前一个函数的结果保存到localStorage / sessionStorage(因此{ {1}}最后一行的链接)。最终的promise
让我有机会保留then
的数据。
根据我运行的测试,一切似乎都运行正常,但我只是想知道这是否是最好的方法呢?我如何处理可能在3个列出的函数中的一个或多个上发生的AJAX错误?
注意:我的func_3
功能也使用了相同的Promise机制,并且'解析'完整的XHR成功,并拒绝'失败/错误时完全相同的XHR。
修改
来自@Bergi的提示后,我已经将代码更新为这样(并且它的工作原理也一样):
AjaxRequest
答案 0 :(得分:3)
一切似乎都运转正常,但我只是想知道这是否是最佳方式?
你应该永远不需要使用Promise
构造函数,除非在最低级别(即在宣传ajax请求时)。你的函数应该简单地写成:
function func_1() {
if (condition) {
return Promise.resolve('1');
} else {
console.log('start');
retrun ajaxRequest(url);
}
}
严格来说,func_2
和func_3
甚至可以return '2'
,then
方法可以将它们用作回调。当然,总是返回一个promise对象会更清晰。
如何处理可能在3个列出的函数中的一个或多个上发生的AJAX错误?
将第二个功能传递给then
,或使用catch
。当promise被拒绝时,将调用此回调,并应处理异常。