【发布时间】:2022-02-26 02:47:21
【问题描述】:
我正在尝试使用 jQuery 的 ajax 功能访问 REST api。
我想要做的是返回 Promise<Customer> 对象,但我收到错误消息,即缺少属性 finally。它在过去确实有效,所以我想最近发生了一些变化。我只是不知道如何提供缺少的finally 属性。
我想一定有一个简单的解决方法,但是在网上找到任何解决方案并不容易。
失败的班级:
export class ServiceCustomer {
public requestCustomers(): Promise<Customer> {
const dataString: ResourceParamCustomer = {
something: 'some entry',
nextthing: 'other entry',
};
return $.ajax({
contentType: 'application/json',
data: JSON.stringify(dataString),
dataType: 'json',
type: 'POST',
url: 'http://localhost:3000/api/customer/list',
});;
}
}
错误:
ERROR in [at-loader] ./src/Service/ServiceCustomer.ts:12:15
TS2741: Property 'finally' is missing in type 'jqXHR<any>' but required in type 'Promise<Customer>'.
package.json中的相关条目:
{
...
"dependencies": {
...
"@types/jquery": "3.3.31",
...
"jquery": "3.4.1",
"popper.js": "1.16.0",
...
},
"devDependencies": {
"autoprefixer": "9.7.1",
"awesome-typescript-loader": "5.2.1",
"clean-webpack-plugin": "3.0.0",
...
"html-webpack-plugin": "3.2.0",
...
"tslint": "5.20.1",
"typescript": "3.7.2",
"typings-for-css-modules-loader": "1.7.0",
...
},
...
}
tsconfig.json:
{
"compilerOptions": {
"outDir": "./dist/",
"sourceMap": true,
"noImplicitAny": true,
"module": "commonjs",
"target": "es2015",
"jsx": "react",
},
"include": [
"./src/**/*"
]
}
【问题讨论】:
-
(1) jQuery Deferreds/Promises 有一个
.always()方法,而不是.finally()。 (2).finally()没有出现在贴出的代码中。 -
@Roamer-1888
.always()有点像.finally(),因为两者都执行成功和错误。有没有办法将它们连接起来,以便能够返回所发布的承诺?我将如何提供所需的finally参数? -
您正在使用 jQuery 承诺(使用 .always)或 JS 原生承诺(使用 .finally)。您可以将 jQuery 承诺转换为原生,但是 (a) 当 jQuery 传播其数据时,您必须智能地执行此操作,并且 (b) 当您已经拥有 .always 时,仅仅让 .finally 可用是不值得的.
标签: jquery typescript rest promise finally