我希望用 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 (因此promise
链在最后一行)。决赛then
让我有机会从func_3
.
根据我运行的测试,一切似乎都正常,但我只是想知道这是否是最好的方法?以及如何处理可能在列出的 3 个函数中的一个或多个上发生的 AJAX 错误?
注意:我的AjaxRequest
函数也使用相同的 Promise 机制,并在成功时“解决”完整的 XHR,并在失败/错误时“拒绝”相同的完整 XHR。
编辑
在@Bergi 的提示之后,我将代码更新为如下所示(它也同样有效):
function func_1()
{
if(condition)
{
return Promise.resolve('1');
}
else
{
console.log('start');
return ajaxRequest(url);
}
}
function func_2(data)
{
if(condition)
{
return Promise.resolve('2');
}
else
{
console.log(data.response);
return ajaxRequest(url);
}
}
function func_3(data)
{
if(condition)
{
return Promise.resolve('3');
}
else
{
console.log(data.response);
return ajaxRequest(url);
}
}
func_1().then(func_2).then(func_3).then(function(data){})['catch'](function(err){console.log(err)});