繁体   English   中英

获取位于回调函数内的变量

[英]get variable located inside callback function

var request = require('request');

var options = {
  url: 'https://api.github.com/repos/request/request',
  headers: {
    'User-Agent': 'request'
  }
};

function callback(error, response, body) {
  if (!error && response.statusCode == 200) {
    var info = JSON.parse(body);
    console.log(info.stargazers_count + " Stars");
    console.log(info.forks_count + " Forks");
  }
}
exports.parse = function(){
   request(options, callback);
}

嗨,我如何获取位于callback函数内的info变量。 抱歉,我是JS的初学者,在我的大脑/和平中找不到答案

回调函数用于处理非阻塞的异步性质。 当作业阻塞I / O时,只需将其放入任务队列并向前移动。 完成任务后,就该触发回调函数了,我们可以用我们想要的任何方式来处理那些返回的值。 那就是使用回调函数。 您可以阅读有关事件循环的详细信息。

在这里,您必须传递自定义回调函数以正确处理该方案。

var request = require('request');

var options = {
  url: 'https://api.github.com/repos/request/request',
  headers: {
    'User-Agent': 'request'
  }
};

exports.parse = function(cb){
   request(options, cb);
}

在您要使用parse方法的地方,使用这样的方法。

parse(function(error, response, body) {
  if (!error && response.statusCode == 200) {
    var info = JSON.parse(body);
    console.log(info.stargazers_count + " Stars");
    console.log(info.forks_count + " Forks");

// TODO with info

  }
});

在更高范围内声明变量将使其可访问。 在调用回调之前,更高范围中的值将不会更新。

var result = {};
function callback(error, response, body) {
    if (!error && response.statusCode == 200) {
        result.info = JSON.parse(body);
        console.log(result.info.stargazers_count + " Stars");
        console.log(result.info.forks_count + " Forks");
    } 
}

如果您的目标只是简单地解析您的正文并轻松获得已解析的JSON,则应考虑使用诸如body-parser之类的中间件。 这是一种标准模式...例如,考虑以下代码:(来自https://github.com/expressjs/body-parser

var express = require('express')
var bodyParser = require('body-parser')

var app = express()

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))

// parse application/json
app.use(bodyParser.json())

app.use(function (req, res) {
  res.setHeader('Content-Type', 'text/plain')
  res.write('you posted:\n')
  res.end(JSON.stringify(req.body, null, 2))
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM