首页 > 解决方案 > Javascript:在承诺中解决和拒绝的目的是什么?

问题描述

据我了解,resolve 和 reject 在提供给 promise 构造函数的回调中指定,并在回调中调用。但是解决和拒绝(我认为)总是做同样的事情,那么为什么还要指定它们呢?

编辑:我应该澄清一下:我不认为解决与拒绝做同样的事情;我的意思是 resolve 似乎总是解决,而 reject 总是拒绝——有没有办法传递一个函数而不是做其他事情的 resolve?

编辑:为了进一步澄清,正如我在下面的评论中所做的那样:如果 Promise 构造函数采用一个函数,该函数又接受 resolve 和 reject 并且这些总是要在函数中调用,为什么必须将 resolve 和 reject 指定为参数呢?

最终编辑:我尝试使用 foo 而不是 resolve 并且它仍然有效。这个怎么可能?我根本没有定义 foo ?除了承诺之外,我可能不了解有关 javascript 的一些东西。我将解析更改为 foo 的代码片段

标签: javascriptpromise

解决方案


当你创建一个 JS Promise 时,你期望一些任务异步发生。此任务可能成功或失败。成功和失败是根据任务是什么来定义的。

当你创建一个新的 Promise 时,你作为创建者必须指定当任务成功或失败时要做什么。将相同的内容传达给承诺解决/拒绝的消费者会派上用场。

所以当消费者使用 athen来检查 promise 的输出时。解析返回的内容将提供给消费者。

当消费者使用 acatch检查承诺的输出时。拒绝返回的任何东西都将交给消费者。

import {Promise} from 'es6-promise'


const foo = true;
const bar = new Promise((resolve, reject) => {
    if (foo) {
        resolve(4);
    } else {
        reject(2);
    }
})
bar.then((value) => console.log(value)).catch((value) => console.log(value));

您可以通过将 foo 的值更改为 true/false 来运行上述示例,并亲自查看输出是什么。


推荐阅读