如何在此方法之外使用正文的值?

时间:2018-05-18 08:52:53

标签: node.js asynchronous callback request

var request = require('request');

var boardsCall = {
  method: 'GET',
  url: 'https://api.trello.com/1/organizations/xxxxxxxxxx/boards?filter=open&fields=id,name',
  qs: {
    key: 'xxxxxxxxxxxxxxxx',
    token: 'xxxxxxxxxxxxxxxxxxxxxxxxx'
  }
};

function test(url, callback) {
  request(url, function(error, response, body) {
    if (error) {
      return callback(error);
    }
    callback(null, JSON.parse(body));
  })
}
const x = test(boardsCall, function(err, body) {
  if (err) {
    console.log(err);
  }
  else {
    return body;
  }
})

console.log(x);

我怎样才能使用身体外的价值? 以后在其他方法中使用它 我对任何变化的最佳实践持开放态度,我阅读了很多并且对回调主题有点困惑,承诺异步等待。

1 个答案:

答案 0 :(得分:1)

在我的方法请求中包含Promise,测试函数返回Promise响应。在主方法内部,测试功能将同步执行。一旦分配给x的响应值在main()方法中执行剩余的处理逻辑。

var request = require('request');

var boardsCall = {
  method: 'GET',
  url: 'https://api.trello.com/1/organizations/xxxxxxxxxx/boards?filter=open&fields=id,name',
  qs: {
    key: 'xxxxxxxxxxxxxxxx',
    token: 'xxxxxxxxxxxxxxxxxxxxxxxxx'
  }
};

function test(url) {
    //Wrapping request callback with Promise
    return new Promise((res, rej)=> {
        request(url, function(error, response, body) {
            if (error) {
              rej(error);
            }
            res(JSON.parse(body));
          })
    })
}

async function main() {
    try {
        const x = await test(boardsCall);       
        console.log("Result : ", x );

        // Remaining logic to process based on x value

    } catch(e) {
        console.error("Error :", e);
    }


}

//Calling main method
main()