我的异步函数中的await语句调用了jQuery的$.post()方法,该方法返回一个有效的promise,然而在TypeScript中我遇到了这个错误:
“await”操作数的类型必须是一个有效的promise,或者不能包含一个可调用的“then”成员。
我的函数如下(为了示例简化了代码)。代码是有效的并且可以工作,但是我在TS控制台中遇到了一个错误。
async function doAsyncPost() {
const postUrl = 'some/url/';
const postData = {name: 'foo', value: 'bar'};
let postResult;
let upateResult;
function failed(message: string, body?: string) {
console.log('error: ', message, ' body: ', body);
}
function promiseFunc() {
return new Promise<void>( resolve => {
// ... do something else....
resolve();
});
};
function finish() {
// ... do something at the end...
}
try {
// The error is on the $.post()
postResult = await $.post(postUrl, $.param(postData));
if (postResult.success !== 'true') {
return failed('Error as occoured', 'Description.....');
}
await promiseFunc();
return finish();
} catch (e) {
await failed('Error as occoured', 'Description.....');
}
}
我猜 TS 在使用 $.post() 时遇到了问题,因为你可以对其调用 .then(),但该如何解决这个问题呢?此外,在更新至 2.4.2 之前我没有遇到这个错误。
postResult = await Promise.resolve($.post(postUrl, $.param(postData)));
或者,另一种选择是:postResult = await $.post(postUrl, $.param(postData)).then();
尽管后者可能会触发相同的错误。 - trincot