我在異步函數中的await語句是對jQuery的$ .post()方法的調用,它返回一個有效的promise,但是我在TypeScript :
'await'操作數的類型必須是有效的承諾或不得包含可調用'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正在和$。員額())上有一個問題,因爲你可以打電話。然後(,但我怎麼解決這個問題得到什麼?另外,在更新2.4.2之前我沒有這個錯誤。
看來確實打字稿是討厭關於jQuery的返回一個也是jqXHR對象的promise對象。試試'postResult = await Promise.resolve($。post(postUrl,$ .param(postData)));'或者,或者:postResult = await $ .post(postUrl,$ .param(postData))。then() ;'儘管後者可能會引發同樣的錯誤。 – trincot
@trincot您的解決方案都可以工作。似乎有點骯髒和不必要的,但我猜目前爲止最好的選擇。如果您想提供您的評論作爲答案,我會將其標記爲已接受。 – Amir