在 node.js 上使用之前如何等待 json 加载?

How do I wait for a json to load before using it on node.js?

[编辑]

我明白了。代码最终是这样的:

//getTrelloJSON.js
var request = require('request');
'use strict';

function getProjJSON(requestURL, callback){
    request.get({
        url: requestURL,
        json: true,
        headers: {'User-Agent': 'request'}
      }, (err, res, data) => {
        if (err) {
            console.log('Error:', err);
        } else if (res.statusCode !== 200) {
            console.log('Status:', res.statusCode);
        } else {
            callback(data);
        }
    });
}

module.exports.getProjJSON = getProjJSON;

//showData.js
var getJSON = require('./getTrelloJSON');

getJSON.getProjJSON('https://trello.com/b/saDpzgbw/ld40-gem-sorceress.json', (result) => {
    var lists = result.lists;
    console.log(lists);
});

I 运行 node showData.js 它得到 json 然后我可以根据需要操作它。我打印出来只是为了证明它有效。

[编辑结束]

我是 node.js 的新手,我遇到了菜鸟问题。 此代码应该从 public trello 板请求 JSON 和 return 带有 trello 的 json 部分(列表部分)的对象。

第一个 console.log() 不起作用,但第二个起作用。

如何让它在打印之前等待 getProjJSON() 完成?

var request = require('request');
'use strict';

//it fails
console.log(getProjJSON('https://trello.com/b/saDpzgbw/ld40-gem-sorceress.json'));

function getProjJSON(requestURL){
    request.get({
        url: requestURL,
        json: true,
        headers: {'User-Agent': 'request'}
      }, (err, res, data) => {
        if (err) {
          console.log('Error:', err);
        } else if (res.statusCode !== 200) {
          console.log('Status:', res.statusCode);
        } else {
          //it works
          console.log(data.lists);
          return data.lists;
        }
    });
}

Node.js 都是关于回调的。 在这里你只是没有注册数据的回调。

var client       = require('http');
var options = {
            hostname: 'host.tld',
            path: '/{uri}',
            method: 'GET', //POST,PUT,DELETE etc
            port: 80,
            headers: {} //
          };
    //handle request;
pRequest    = client.request(options, function(response){
console.log("Code: "+response.statusCode+ "\n Headers: "+response.headers);
response.on('data', function (chunk) {
      console.log(chunk);
});
response.on('end',function(){
      console.log("\nResponse ended\n");
});
response.on('error', function(err){
      console.log("Error Occurred: "+err.message);
});

});

或者这里是一个完整的例子,希望这能解决你的问题

const postData = querystring.stringify({
  'msg' : 'Hello World!'
});

const options = {
  hostname: 'www.google.com',
  port: 80,
  path: '/upload',
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Content-Length': Buffer.byteLength(postData)
  }
};

const req = http.request(options, (res) => {
  console.log(`res_code: ${res.statusCode}`);
  console.log(`res_header: ${JSON.stringify(res.headers)}`);
  res.setEncoding('utf8');
  res.on('data', (chunk) => {
    console.log(`res_data: ${chunk}`);
  });
  res.on('end', () => {
    console.log('end of response');
  });
});

req.on('error', (e) => {
  console.error(`response error ${e.message}`);
});

//write back 
req.write(postData);
req.end();