Promise((resolve,reject)=>{}) 和 Promise(resolve =>{}) 有什么区别?

6 javascript es6-promise

我们知道 Promise 构造函数采用一个执行器函数,该函数有两个参数,我们用它们来生成成功案例或失败案例。今天我正在编程,我被卡住了,但后来我解决了这个问题,但我发现有一件事需要理解。

有什么区别

new Promise(resolve => {

    // resolve

});
Run Code Online (Sandbox Code Playgroud)

new Promise((resolve,reject)=>{

    // resolve
    // reject

});
Run Code Online (Sandbox Code Playgroud)

我们可以这样做吗?

new Promise(resolve => {

    // resolve

}, reject => {

    // reject

});
Run Code Online (Sandbox Code Playgroud)

例子将更受赞赏。谢谢 !!!

Seb*_*mon 5

这并不是特定于 Promise,而是特定于回调函数。

\n\n

new Promise((resolve) => {});1创建一个 Promise,其回调仅接受resolve参数。\xe2\x80\x99s 不可能调用否则提供的拒绝函数。2

\n\n

new Promise((resolve, reject) => {});创建一个 Promise,其回调接受两个参数,包括用于拒绝的参数。

\n\n

上面的两个示例演示了位置参数的工作原理。回调函数中的第一个参数始终是resolve函数,第二个参数始终是reject函数。

\n\n

new Promise((reject, resolve) => {});将创建一个 Promise,您可以在其中解决reject并拒绝resolve

\n\n

您可以throw在回调函数的范围内或resolve(Promise.reject())导致拒绝发生:

\n\n
new Promise((resolve) => {\n  throw new Error("42");\n  // or `resolve(Promise.reject(new Error("42")));`\n})\n  .catch(console.warn); // Prints warning \xe2\x80\x9cError: "42"\xe2\x80\x9d in the console.\n
Run Code Online (Sandbox Code Playgroud)\n\n

您不能使用new Promise((resolve) => {}, (reject) => {});,因为Promise构造函数只接受一个参数。第二个回调函数将被忽略。

\n\n
\n\n

1 :(resolve) => {}当然相当于resolve => {}. 但箭头函数参数实际上总是需要括号。简单参数和单个参数是唯一可以省略的例外。请参阅有关箭头函数语法的 MDN 文章

\n\n

2:使用常规函数,new Promise(function(resolve){});或者new Promise(function(){});您可以使用( resolve ) 或( reject )访问任何参数arguments[0]arguments[1]

\n