为什么大佬们都喜欢把Promise写成箭头函数的返回值?

403 阅读1分钟

如果你曾有同样的疑问,请往下看

如果没有 大佬请止步

之前在看到一些优秀的文章或者示例代码时,经常会看到诸如此种形式的写法:

const promise=()=>{
    return new Promise(...)
}

const f=()=>{
return function ff()
}

然后作为小菜的我就会诞生点点疑惑,为啥要这样折腾一下呢,直接写它不香吗?难道是这样显得高大上???

~直到某天,我亲身遇到这样的问题

我需要创建一些promise对象,然后把它们放到一个队列里,等到我需要的时候再取出来调用

开始我是这样写的

                    const createPromise = new Promise((resolve, reject) => 
                        {
                            setTimeout(() => {
                                ···
                                resolve();
                            }, time);
                        });   
                     queue.push(createPromise);                                  

然而,事情并不像我想象的那么美好,我以为我从队列里把它拿出来时才调用,但实际上它在放进队列时就触发了 ,那么,问题如何解决呢,当然是解决提出问题的人,😄开个玩笑,解决的方法就是像开始说的那样,上代码:

                    const createPromise = () => {
                        return new Promise((resolve, reject) => {
                            setTimeout(() => {
                                console.log(order);
                                resolve();
                            }, time);
                        });
                    };
                    queue.push(createPromise);

OK,完美。取出来执行的时候记得加个()哦!

题外话,以下内容是用来提醒自己的,就在写这篇文章的同时,我又犯这个傻了,写在这里作为警醒setTimeout相信大家都用过,大家在用的时候应该都知道,它的第一个参数必须是函数名,千万千万不能带括号,一带括号函数就会立即执行,如果必须要传参,通常就是用到箭头函数,像这样:

setTimeout(() => {
              f(x,y)
            }, 1000);