簡體   English   中英

Node.js function 異步返回不等待

[英]Node.js function async return not awaiting

我想我在理解 Node.js 中的等待/承諾時遇到問題,我以為我正確地實現了它,但它看起來不正確......

我有這個 function 從我的 Google Drive 中獲取文件列表:

const listFiles = async () => {
    const filesList = await googleDrive.listFiles();
    filesList.forEach((file)=>{
        console.log(`File is ${file.name}`);
    });
    return filesList;
  }

這個 function 工作正常,但現在我嘗試在我的 main.js 中這樣調用它:

const listFiles = async () => {
    const filesList = await googleDrive.listFiles();
    filesList.forEach((file)=>{
        console.log(`File is ${file.name} with id`);
    });
    return filesList;
  }

const getFiles =() =>{
    const files = listFiles();
    console.log(files);
};


getFiles();

所以我的問題是,從getFiles()我總是得到Promise { <pending> }作為 console.log ......但在我的listFiles()中,我可以看到文件在await之后被正確打印......我真的不明白,在await之后, filesList應該准備好並解決。

我在這里做錯了什么?

async function 返回 promise ,所以你仍然需要await

返回值

一個 Promise 將使用異步 function 返回的值解析,或者被異步 function 拋出的異常或未捕獲的異常拒絕。

const listFiles = async () => {
    const filesList = await googleDrive.listFiles();
    filesList.forEach((file)=>{
        console.log(`File is ${file.name} with id`);
    });
    return filesList;
  }

const getFiles = async () =>{
    const files = await listFiles();
    console.log(files);
};


getFiles();

listFiles被正確列為async ,但在這種情況下, getFiles也應該是 async - 它需要await listFiles的結果。

您的代碼應如下所示:

const listFiles = async () => {
    const filesList = await googleDrive.listFiles();
    filesList.forEach((file)=>{
        console.log(`File is ${file.name} with id`);
    });
    return filesList;
  }

const getFiles = async () =>{
    const files = await listFiles();
    console.log(files);
};


getFiles();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM