This question already has answers here:
How do I return the response from an asynchronous call?
                            
                                (38个答案)
                            
                    
                2年前关闭。
        

    

使用readFile json返回数组消息,对象返回空数组,为什么?

我的代码:

var fs = require("fs"); // filesystem

class Message {

   constructor() {
      this._message_list = [];
   }

   set message_list(val) {

      this._message_list = val;
   }

   get message_list() {
     return this._message_list;
   }

   getMessages() {

      fs.readFile("./models/messages-list.json", "utf8", (err, data) => {
       if(err){
         return err;
       }
        // append array messages
        this._message_list = Object.keys(JSON.parse(data));
        console.log(this._message_list); // return ["message 1", "message 2"]
});

    return this._message_list; // return array messages
 }

}

module.exports = {
  Message
};


var Message = require("./models/message");

let mensagem = null;
mensagem = new Message.Message();
console.log( mensagem.getMessages()); //return []


如何返回我的数组消息?我的this._message_list返回空数组的方式?

最佳答案

由于fs.readFile是异步的,因此在执行以下操作之前不会返回:

// return array messages
return this._message_list;


如果您使用fs.readFileSync,这应该可以。

getMessages() {
    var data = fs.readFileSync("./models/messages-list.json", "utf8");

    this._message_list = Object.keys(JSON.parse(data));

    // log ["message 1", "message 2"]
    console.log(this._message_list);

    // return array messages
    return this._message_list;
}

关于javascript - readFile,escope和类Javascript ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48113054/

10-14 00:07