Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript promise.resolve()和reject()中可接受的参数_Javascript_Promise - Fatal编程技术网

Javascript promise.resolve()和reject()中可接受的参数

Javascript promise.resolve()和reject()中可接受的参数,javascript,promise,Javascript,Promise,当涉及到promise对象中的resolve()和reject()方法时,什么是可接受的参数 我通常看到字符串和数字。 我假设js中的大多数其他数据类型?i、 e.对象、函数、数组等 let x = new Promise(function(resolve,reject){ resolve("string"); reject("error"); }); resolve()可以用任何Javascript类型调用。它所做的只是通过将该值直接传递给正在收听主机承诺的人。然后()或等待 唯一

当涉及到promise对象中的resolve()和reject()方法时,什么是可接受的参数

我通常看到字符串和数字。 我假设js中的大多数其他数据类型?i、 e.对象、函数、数组等

let x = new 
Promise(function(resolve,reject){
  resolve("string");
  reject("error");
});
resolve()
可以用任何Javascript类型调用。它所做的只是通过
将该值直接传递给正在收听主机承诺的人。然后()
等待

唯一的例外是,如果您使用“thenable”(行为类似于承诺对象的任何东西)来解析它,那么该承诺本身将被等待,原始承诺的解析值将成为该新承诺的解析值

事实上,无法直接解析承诺本身,因为
resolve()
将检测到您已解析承诺并将链接到它。如果你有这样做的理由,你必须将承诺包装在一个对象中,并用该对象来解决

也没有什么可以阻止您将任何Javascript值传递给
reject()
,但是使用错误对象进行拒绝是一种经常使用的惯例,并且有相当多的错误处理代码可以更简单或更容易,甚至可能期望您使用错误对象。它还有一个优点,即为您提供一个堆栈跟踪(尽管有时是一个较小的异步堆栈跟踪),如果调用方需要更多关于可能发生的情况的信息,它至少会告诉调用方错误的起源。但是,标准或语言中没有任何东西要求您使用错误对象
reject()


您可能还需要注意,您的示例调用
resolve(“string”)
,然后调用
reject(“error”)
。承诺是一种一次性的手段。第一个被调用的
resolve()
reject()
是唯一一个被关注的,任何后续调用都会被忽略。承诺“锁定”第一个解析的值或拒绝您给出的理由,此后再也不能更改。

绝对正确anything@CertainPerformance酷,谢谢!承诺是“在未来某个时间可用的价值”(可能意味着“永远”)的抽象。因此,它是实际值的包装器/占位符,实际值可以是任何JS表达式(甚至是另一个承诺)。请注意,调用
resolve
/
reject
的时间通常是事先不知道的-请考虑任何异步操作,如调用url、读取文件、查询数据库。请注意,在Promise中同时调用
resolve
reject
,这绝对不是您的用户所期望的。期望只调用一个。使用任何类型解析。拒绝也将接受任何类型,但您应始终使用错误对象拒绝。。。原因是,(a)使错误处理程序知道预期结果,(b)使堆栈跟踪可用于错误处理程序。