javascript – 解决/拒绝承诺,有什么区别?

故事

我一生都在承诺中使用以下代码模式:

const => new Promise((resolve, reject) => {
    //do some work
    if(err !== undefined){
        reject(err);
        return;
    }

    if(someCondition){
        resolve(1);
        return;
    }

    resolve(2);
});

然而,最近我的一个学生向我提出了一个有趣的代码:

const => new Promise((resolve, reject) => {
    //do some work
    if(err !== undefined) return reject(err);

    if(someCondition) return resolve(1);

    resolve(2);
});

我的第一反应是:“你应该按我的方式行事,因为……(随后是沉默)”

问题

我尝试找到差异的逻辑解释,但我找不到.

我尝试检查Promises的MDN文档,看看解析或拒绝是否可以返回未定义的内容,但我也没有找到它.

题:

所以现在我有一个问题:
  – 我的方法和我的学生的方法之间有什么区别(如果有的话),代码功能明智吗? (AKA,他们总会返回相同的输出并在相同条件下具有相同的行为吗?)

最佳答案

What are the differences (if any) between my approach and my pupil’s approach, code functionality wise?

在这种特定情况下,没有任何原因,原因有三:

>传递给Promise执行程序的解析和拒绝函数(传递新Promise的函数)are defined as返回undefined.所以return resolve(…)有效解决(…);返回undefined;
> Promise构造函数doesn’t use the return value of the executor,所以即使#1不是真的,它仍然无关紧要.
>在一个函数中,返回的区别;并返回undefined;存在于规范级别,但在代码中不可观察.也就是说,在代码中,它们完全相同,即使规范稍微区分它们.

值得注意的是,虽然它没有产生功能差异,但它会产生语义差异. return resolve(…)表示“调用resolve并返回其返回值” – 表明该返回值对代码有意义和重要性.它没有,所以return resolve(…)会误导以后维护代码的人.作为一种风格问题,我不推荐它. (请注意,如果它变得普遍,它就变成了一个成语,并且通过了解成语来解决混乱,但是……)如果保存线对你很重要,那就解决(…);返回; (或者更好的是,不要担心额外的线路,或者让你的逻辑根本不需要返回).但你的问题是关于功能的差异,所以……

也就是说,将此概括为其他情况是危险的,在这种情况下,您调用的函数可能不会返回undefined,或者使用函数的返回值.

转载注明原文:javascript – 解决/拒绝承诺,有什么区别? - 代码日志