请参阅此最小示例:我有这样的数据: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
对象有任何联系。这意味着调用this
该reject()
方法时的值将不正确,并且不允许这样做。
正如帕特里克在评论中提到的,这与你不能这样做的原因是一样的:
let reject = Promise.reject; reject("whatever");
方法需要使用其对象的上下文来调用,除非它们专门设计为不需要其对象的上下文(有一些实例)。
如果你想要一个快捷方式,你可以这样做:
something.then(Promise.reject.bind(Promise))
这会将Promise
对象绑定到方法(通过本质上创建一个将其调用为 的存根函数Promise.reject()
)。
添加回答
举报
0/150
提交
取消