如果你曾有同样的疑问,请往下看
如果没有 大佬请止步
之前在看到一些优秀的文章或者示例代码时,经常会看到诸如此种形式的写法:
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);