[英]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.