javascript - 为什么我在 Node.js 中出现段错误?

标签 javascript node.js segmentation-fault

我这里有这个功能:

function createInsta(email, userid) {
  if (!fs.existsSync('users/' + email + '/' + userid)) {
    fs.mkdir('users/' + email + '/' + userid)
    fs.writeFileSync(('users/' + email + '/' + userid +  '/instagram.json'), fs.readFileSync("data/data.json", "utf-8"))
    console.log("insta folder created");
  }
  console.log("Initializing Data")
  var data = fs.readFileSync('users/' + email + '/' + userid +  '/instagram.json', "utf-8")
  data = JSON.parse(data);
  var result;
  request(("https://instagram.com/" + userid + "/?__a=1"), function(error, response, body) {
    var res = JSON.parse(body);
    result = res.user.followed_by.count
    if (error) {
      console.log(err)
    }
  })
  while (result === undefined) {
    deasync.sleep(100)
  }
  data.STARTING_COUNTS[0].DAY = result;
  data.STARTING_COUNTS[0].WEEK = result;
  data.STARTING_COUNTS[0].MONTH = result;

}

在控制台打印出 Initializing Data 后,控制台显示 Segmentation fault

我不知道这是为什么,我的代码似乎没有任何东西会导致这样的错误。

有什么指点吗?谢谢

最佳答案

正如所 promise 的(请原谅双关语),这里开始将您的代码转换为 Promise/await。

这是让您的代码开始使用 promises 的开始,需要更多的错误检查等,但我现在故意对代码做的很少以显示更改,我们可以在继续进行重构.

例如。所有 fs.existsSync 等,都希望成为 promise ,这样我们就可以摆脱所有同步的东西。您的 node.js 应用程序会因此而爱上您。

稍后,我们可以做更多。浏览器/Node 中内置的 Promise 很好,但我也发现 Promise 库可以使事情变得更容易,我建议 bluebird -> http://bluebirdjs.com/docs/getting-started.html那里也值得好好读一读,bluebird 有一些有用的实用函数,比如 promisify,可以让你的 fs.func 更容易。

所以我认为现在应该这样做,稍后我们将进行另一次重构。

//lets mark this function as async..
async function createInsta(email, userid) {
  return new Promise(function (resolve, reject) {
    if (!fs.existsSync('users/' + email + '/' + userid)) {
      fs.mkdir('users/' + email + '/' + userid)
      fs.writeFileSync(('users/' + email + '/' + userid +  '/instagram.json'), fs.readFileSync("data/data.json", "utf-8"))
      console.log("insta folder created");
    }
    console.log("Initializing Data")
    var data = fs.readFileSync('users/' + email + '/' + userid +  '/instagram.json', "utf-8")
    data = JSON.parse(data);    
    request(("https://instagram.com/" + userid + "/?__a=1"), function(error, response, body) {
      if (error) {
        console.log(err)
        return reject(error);
      }
      var res = JSON.parse(body);
      var result = res.user.followed_by.count
      data.STARTING_COUNTS[0].DAY = result;
      data.STARTING_COUNTS[0].WEEK = result;
      data.STARTING_COUNTS[0].MONTH = result;
      resolve(data); //i'm assuming data is what your wanting to return
    })
  });
}

//to be able to use await our function also needs to be async
async function run() {
 var data = await createInsta('bob@bob.com');
}

关于javascript - 为什么我在 Node.js 中出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40118215/

相关文章:

node.js - npm安装错误。 Node .js?事件? Xcode?还是另一个问题?

node.js - React-native如何在键盘上方向上移动文本字段

javascript - 5 秒后提交文本值

javascript - ReactJS:为收集方法调用重新设置帮助文件管理器

node.js - 查询超过350点的历史数据

c++ - 段错误 - C++ 数组

c - linux 上的 memcpy 段错误,但 os x 上没有

在 C 中调用 NASM 函数

javascript - 单击时切换数据目标子菜单的 Angular 方式?

javascript - 将附加数据设置为 highcharts 系列