0

我正在尝试使用我的程序读取 frpm 一个 json 文件夹,并且我想使用 GET 列表端点来读取浏览器或邮递员,但我得到了上述类型错误。这是我的代码:

模型.js:

const fs = require('fs');

  function loadTeams() {
    return new Promise((resolve, reject) => {
      fs.readFile('./json/prov-nodes.json', (err, data) => {
          if (err) reject(err);
          const teams = JSON.parse(data);
          console.log(teams);
          resolve(teams);
      });
    });
}

app.use(bodyParser.json());

app.get('/list', (req, res) => {
    let teams = [];
    loadTeams()
      .then(function(data){   
        teams = JSON.stringify(data); 
        console.log(teams);  
        **res.send(teams);** //intended to send to browser/postman response
        console.log('try...part ..read call');

      })
      .catch(error => console.log(error))
      res.send("My root page");
      console.log(teams);
     
});
4

2 回答 2

2

loadTeams函数不返回承诺,因此您不能调用.then().

您可以将函数包装在这样的 Promise 中:

function loadTeams() {
    return new Promise(function(resolve, reject) {
        fs.readFile('./json/prov-nodes.json', (err, data) => {
            if (err) reject(err);
            try {
                const teams = JSON.parse(data);
                return resolve(teams);
            } catch(e) {
                reject(e);
            }
        });
    });
}
于 2020-12-23T11:52:26.490 回答
0

为了loadTeams用作异步函数,您应该将其转换为返回Promise回调结果的函数:

function loadTeams() {
  return new Promise((resolve, reject) => {
    fs.readFile('./json/prov-nodes.json', (err, data) => {
        if (err) reject(err);
        const teams = JSON.parse(data);
        console.log(teams);
        resolve(teams);
    });
  });
}
于 2020-12-23T11:49:31.573 回答