【问题标题】:Asyncronous call using request and getting callback to work within a function [duplicate]使用请求进行异步调用并让回调在函数中工作[重复]
【发布时间】:2019-12-10 05:38:16
【问题描述】:

我在网络方面不是很有经验,我正在尝试在一个类中进行一个简单的 api 调用。我遇到了新人面临的非常经典的回调问题,虽然有很多关于如何处理这个逻辑的例子,但我很难在一个类中实现它。我正在使用request。显然,下面的任何内容都不起作用,尤其是与 myBody 相关的内容,但我添加它是为了展示在担心异步调用之前我是如何从逻辑上考虑它的。

const request = require('request);

class GetData{
  constructor(){
    this.getData();
  }

  reallyGetData(){
      var myData = this.getdata;
      return myData;
  }

  getData(){
    //var myBody;
    request({'url':`https://somewebsite.com/things.json`, 'json': true }, function (error, response, body) {
        console.log('error:', error); // Print the error if one occurred
        console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received

        // Successfully returns body as expected
        console.log("From inside getData: " + body);
        //myBody = body;
        });
    //return myBody;
    }
}

我找到的最有用的链接是this one

但是,我对 node(和 javascript 一起)还很陌生,我似乎无法获得添加回调函数的语法。我从示例中尝试的所有内容都是无效语法,所以当我尝试添加类似于以下的回调函数时:

getData(function(result) {
    console.log(result);
}

我不知道如何在一个类中实现这个逻辑。

【问题讨论】:

  • 并不是说你不能让它与你的 request 库一起工作,但如果你确实发现你想尝试一个类似的 API 与 Promise 一起工作,我建议你采取看node-fetchrequest-promise-native

标签: javascript node.js api asynchronous request


【解决方案1】:

getData() 应该被声明为将函数作为“一等公民”。它也可以称为函数指针。

getData(callback) {
    ...

    callback(result);
}

调用它时,你会使用

getData(function(result) { ... });

【讨论】:

    【解决方案2】:

    你可以使用等待操作符。

    const request = require('request');
    
    class Data {
        constructor() {
        }
        async getData() {
            var myBody;
            await request({ 'url': 'https://somewebsite.com/things.json', 'json': true }, (error, response, body) => {
                myBody = body;
            });
            return myBody;
        }
    }
    
    (new Data()).getData().then(data => {
        // data is the value of response
        console.log(data);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-03
      相关资源
      最近更新 更多