由于JS的箭头功能支持仍然是相当低的,我想从下面的代码段替换它们:的Javascript承诺 - 更换箭头功能
Promise.all([f1(), f2()])
.then(values => { f3(values); })
.catch(values => { f4(values); });
不知道如何才能实现这一目标?
由于JS的箭头功能支持仍然是相当低的,我想从下面的代码段替换它们:的Javascript承诺 - 更换箭头功能
Promise.all([f1(), f2()])
.then(values => { f3(values); })
.catch(values => { f4(values); });
不知道如何才能实现这一目标?
这是一个解决方案,我写信给使现有的像IE11的承诺少的浏览器基于承诺代码的工作。不完美,但效果很好。
CanPromise = !!window.Promise;
PromiseResolve = [];
PromiseReject = [];
if (!CanPromise)
{
window.Promise = function (f)
{
var p = {};
p.resolve = function (result)
{
PromiseResolve.push(result);
}
p.reject = function (result)
{
PromiseReject.push(result);
}
return f(p.resolve, p.reject);
};
}
//...........
PromiseResolve.length = 0;
PromiseReject.length = 0;
F1(args);
F2(args);
var AjaxTimeout = 10000;
var period = 100;
var cnt = 0;
var cntMax = parseInt(AjaxTimeout/period);
var t = setInterval(function()
{
if (PromiseReject.length > 0)
{
clearInterval(t);
Error(PromiseReject[0]);
}
else if (PromiseResolve.length >= 2)
{
clearInterval(t);
Success(PromiseResolve);
}
else if (cnt >= cntMax)
{
clearInterval(t);
}
cnt++;
}, period);
应该是简单的,只是你为什么要使用函数表达式中存在的所有输入“功能”,而不是
Promise.all([f1(), f2()]).then(function(values) {
f3(values);
}).catch(function(values) {
f4(values);
});
?你想避免return
值?如果不是,只是去
Promise.all([f1(), f2()]).then(f3).catch(f4);
哦,我在这些箭头后面有额外的代码,这里我简化了它的演示,并用F代替。 – Marko
所以你只是想用'function(a){return b}'来代替'a => b'? – fafl
如果你想要更多的向后兼容性,你应该保留你的体面的源代码,并将其转换为es5。 –