为了账号安全,请及时绑定邮箱和手机立即绑定

调用 something.then(Promise.reject) 结果错误,为什么简写不起作用

调用 something.then(Promise.reject) 结果错误,为什么简写不起作用

四季花海 2021-08-20 10:21:47
请参阅此最小示例:我有这样的数据:const testObject = { test: 'foo' };我的主要功能是这样的:导致错误// This cause errorfunction handleResponse(response) {  return response.json().then(Promise.reject); // Please notice this line}try {  await handleResponse({    json: () => Promise.resolve(testObject),  });} catch (err) {  console.log(err);  // => TypeError: PromiseReject called on non-object}这是一个有效的:正确// This worksfunction handleResponse(response) {  return response.json().then((res) => Promise.reject(res)); // Please notice this line}try {  await handleResponse({    json: () => Promise.resolve(testObject),  });} catch (err) {  console.log(err);  // => {test: "foo"}}为什么会这样?我错过了什么?
查看完整描述

1 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

something.then(Promise.reject)获取对拒绝方法的引用并仅传递该函数引用。它不再与Promise对象有任何联系。这意味着调用thisreject()方法时的值将不正确,并且不允许这样做。

正如帕特里克在评论中提到的,这与你不能这样做的原因是一样的:

let reject = Promise.reject;
reject("whatever");

方法需要使用其对象的上下文来调用,除非它们专门设计为不需要其对象的上下文(有一些实例)。

如果你想要一个快捷方式,你可以这样做:

something.then(Promise.reject.bind(Promise))

这会将Promise对象绑定到方法(通过本质上创建一个将其调用为 的存根函数Promise.reject())。


查看完整回答
反对 回复 2021-08-20
  • 1 回答
  • 0 关注
  • 294 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信