Javascript承诺 - 替换箭头功能

时间:2016-11-14 11:07:55

标签: javascript arrow-functions

由于JS中对箭头函数的支持仍然很低,我想从以下代码片段替换它们:

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

知道如何实现这一目标?

3 个答案:

答案 0 :(得分:2)

应该是直截了当的,只需输入"功能"代替

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

答案 1 :(得分:0)

为什么你在那里使用函数表达式?您想避免return值吗?如果没有,请转到

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

答案 2 :(得分: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);