我對 js 很陌生,我正在學習 Nestjs。我正在使用他們的 Vimeo 庫構建一個 API 來使用 Vimeo API。要上傳視頻,Vimeo 類有一個名為 upload 的方法:
upload(
file: string | File,
params: object,
completeCallback: UriCallback,
progressCallback: ProgressCallback | undefined,
errorCallback: ErrorCallback,
): void;
upload(
file: string | File,
completeCallback: UriCallback,
progressCallback: ProgressCallback | undefined,
errorCallback: ErrorCallback,
): void;
在我的服務中,我像這樣使用它:
async uploadVideo(@Body() video: UploadVideoDto): Promise<string> {
let videoUri: string;
this.client.upload(
video.pathToFile,
{
name: video.name,
description: video.description,
},
function (uri) {
console.log(uri);
videoUri = uri;
},
function (bytesUploaded, bytesTotal) {
console.log(bytesUploaded, bytesTotal);
},
function (error) {
throw new Error(error);
},
);
return videoUri;
}
是上傳完成時的function (uri) { console.log(uri) } 回呼函式,它給出了視頻上傳到的 uri。我試圖將它放在我的控制器上,如下所示:
@Post('/upload')
async upload(@Body() video: UploadVideoDto) {
await this.appService.uploadVideo(video).then(function (uri): void {
console.log(uri);
});
}
問題是 console.log(uri) 總是列印未定義。如何從我的服務獲取回呼回傳到我的控制器?
uj5u.com熱心網友回復:
如果uploadVideo應該回傳一個決議為字串 (the uri) 的 Promise,它可能是這樣的:
async uploadVideo(video: UploadVideoDto): Promise<string> {
return new Promise<string>((resolve, reject) => {
this.client.upload(
video.pathToFile,
{
name: video.name,
description: video.description,
},
function (uri) {
resolve(uri)
},
function (bytesUploaded, bytesTotal) {
console.log(bytesUploaded, bytesTotal);
},
function (error) {
reject(error)
},
);
})
}
了解 JS async/await特性。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/444557.html
上一篇:承諾中的最終執行順序()
