簡體   English   中英

在承諾中從 .then() 返回一個值?

[英]Returning a value from a .then() in a promise?

我試圖將文件讀取為 JSON,操作 JSON,然后將操作后的 JSON 返回給 flatten 函數。 下面是我的承諾和我的扁平化功能。

承諾

const fs = require('fs');

module.exports = (filePath) => {
  return new Promise((fulfill, reject) => {
    fs.readFile(filePath, 'utf8', (err, res) => {
      if (err) reject(err);
      else fulfill(res);
    });
  });
};

扁平化功能

 flatten: (baseLoc, filePath, updateRev) => {
return readFilePromise(filePath)
    .then((data) => {
      const jsonObject = Object.assign({}, data);
      const flatJson = flattener(jsonObject, baseLoc);
      if (flatJson.$meta) {
        delete flatJson.$meta;
      }
      if (updateRev === true || updateRev === 'true') {
        flatJson.id = incrementVersion(flatJson.id);
      }
      return flatJson;
    })
    .catch(err => err);
}

我在返回承諾時收到一個 {}。 如果我不返回承諾,而是依靠 return flatJson 語句,我會得到未定義。 我不確定為什么會發生這種情況,因為從我在 StackOverflow/Google 上看到的所有內容來看,我已經正確地構建了所有內容。

奇怪的是,如果我通過代碼調試,我可以看到 return flatJson 語句確實保存了我正在尋找的值,只是當另一個函數調用 flatten 函數時,我最終得到了一個 undefined或 {}。

您只能在異步上下文中使用 await 關鍵字以同步樣式獲取異步函數的結果,如下所示:

async function getResultDirect(req, res) {
  let result = await flatten(baseLoc, filePath, updateRev);
  return result;
}

但這只是隱藏了堆棧下一層的異步性。 沒有其他辦法。

暫無
暫無

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

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