从诺言中返回一个.then()



我试图将文件读取为JSON,操纵JSON,然后将操纵的JSON返回到Flatten功能中。以下是我的诺言和我平坦的功能。

Promise

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);
}

我回报承诺后会得到一个{}。如果我不返回承诺,而是依靠返回flatjson语句,我会变得不确定。我不确定为什么会发生这种情况,因为从我已经在Stackoverflow/Google上看到的所有内容,我的所有内容都正确。

奇怪的是,如果我通过代码进行调试,我可以看到返回flatjson语句实际上拥有我要寻找的值,只是当另一个函数调用扁平函数时,我最终会出现使用未定义或{}。

您只能使用同步的关键字在类似的异步上下文中以同步样式获得异步功能的结果:

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

,但这只是隐藏了异步性的一个级别。没有其他方法。

最新更新