2016-11-14 74 views
0

由于JS的箭头功能支持仍然是相当低的,我想从下面的代码段替换它们:的Javascript承诺 - 更换箭头功能

Promise.all([f1(), f2()]) 
.then(values => { f3(values); }) 
.catch(values => { f4(values); }); 

不知道如何才能实现这一目标?

+1

所以你只是想用'function(a){return b}'来代替'a => b'? – fafl

+0

如果你想要更多的向后兼容性,你应该保留你的体面的源代码,并将其转换为es5。 –

回答

0

这是一个解决方案,我写信给使现有的像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); 
2

应该是简单的,只是你为什么要使用函数表达式中存在的所有输入“功能”,而不是

Promise.all([f1(), f2()]).then(function(values) { 
    f3(values); 
}).catch(function(values) { 
    f4(values); 
}); 
0

?你想避免return值?如果不是,只是去

Promise.all([f1(), f2()]).then(f3).catch(f4); 
+0

哦,我在这些箭头后面有额外的代码,这里我简化了它的演示,并用F代替。 – Marko