Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.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 调用某物。然后(承诺。拒绝)结果错误,为什么速记不起作用_Javascript_Node.js - Fatal编程技术网

Javascript 调用某物。然后(承诺。拒绝)结果错误,为什么速记不起作用

Javascript 调用某物。然后(承诺。拒绝)结果错误,为什么速记不起作用,javascript,node.js,Javascript,Node.js,请参见以下示例: 我有这样的数据: consttestobject={test:'foo'}; 我的主要功能是: 导致错误 //这会导致错误 功能句柄响应(响应){ return response.json().then(Promise.reject);//请注意这一行 } 试一试{ 等待处理响应({ json:()=>Promise.resolve(testObject), }); }捕捉(错误){ 控制台日志(err); //=>TypeError:在非对象上调用PromiseReject

请参见以下示例:

我有这样的数据:

consttestobject={test:'foo'};
我的主要功能是:

导致错误

//这会导致错误
功能句柄响应(响应){
return response.json().then(Promise.reject);//请注意这一行
}
试一试{
等待处理响应({
json:()=>Promise.resolve(testObject),
});
}捕捉(错误){
控制台日志(err);
//=>TypeError:在非对象上调用PromiseReject
}
这一个有效:

正确


//这很有效
功能句柄响应(响应){
return response.json()。然后((res)=>Promise.reject(res));//请注意这一行
}
试一试{
等待处理响应({
json:()=>Promise.resolve(testObject),
});
}捕捉(错误){
控制台日志(err);
//=>{test:“foo”}
}
为什么会这样?我遗漏了什么?

一些东西。然后(Promise.reject)
获取对拒绝方法的引用,并只传递该函数引用。它不再与
Promise
对象有任何连接。这意味着调用
reject()
方法时的
This
值将不正确,这是不允许的

正如Patrick在评论中提到的,这与你不能这样做的原因相同:

let reject = Promise.reject;
reject("whatever");
方法需要与对象的上下文一起调用,除非它们被专门设计为不需要对象的上下文(有一些实例)

如果需要快捷方式,可以执行以下操作:

something.then(Promise.reject.bind(Promise))
这将把
Promise
对象绑定到方法(本质上是创建一个存根函数,将其称为
Promise.reject()

其他有关答案:


相同原因
var拒绝=Promise.reject;拒绝({test:'foo'})
无效。