Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript承诺-替换箭头函数_Javascript_Arrow Functions - Fatal编程技术网

Javascript承诺-替换箭头函数

Javascript承诺-替换箭头函数,javascript,arrow-functions,Javascript,Arrow Functions,由于JS中对箭头函数的支持仍然很低,我想从以下代码片段中替换它们: Promise.all([f1(), f2()]) .then(values => { f3(values); }) .catch(values => { f4(values); }); 你知道如何实现这一点吗?应该是直截了当的,只需键入“函数”即可 应该是直截了当的,只需键入“函数”即可 为什么要在这里使用函数表达式?是否要避免返回值?如果没有,就去买吧 Promise.all([f1(), f2()]).the

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

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

你知道如何实现这一点吗?

应该是直截了当的,只需键入“函数”即可


应该是直截了当的,只需键入“函数”即可


为什么要在这里使用函数表达式?是否要避免返回
值?如果没有,就去买吧

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

为什么要在这里使用函数表达式?是否要避免返回
值?如果没有,就去买吧

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

这是我编写的一个解决方案,它允许现有的基于承诺的代码在没有承诺的浏览器(如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);

这是我编写的一个解决方案,它允许现有的基于承诺的代码在没有承诺的浏览器(如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);

因此,您只需要将
a=>b
替换为
函数(a){return b}
?如果您想要更向后兼容,您可能应该保持您的源代码的灵活性并将其传输到es5,所以您只需要将
a=>b
替换为
函数(a){return b}
?如果您想获得更多向后兼容性,您可能应该保持您的源代码得体,并将其传输到es5。我在这些箭头后面有其他代码,这里我将其简化为演示,用Fs替换。哦,我在这些箭头后面有其他代码,这里我将其简化为演示,用Fs替换。