【问题标题】:how to nest javascript http request calls?如何嵌套javascript http请求调用?
【发布时间】:2020-01-15 04:12:45
【问题描述】:

我正在努力拨打按钮单击时将值传递给 http 请求的调用。第一个请求的结果被解析出来,然后在第二个 http 调用中使用。我可以得到第一个电话来工作:

 {
   import config from "../config.json";
   const httpModule = require("tns-core-modules/http");
   ...
   let value1 = makeApi1Call(rawValue);
   let value2 = makeApi2Call(value1);

  makeApi1Call(rawValue) {

  let aValue = null;
  httpModule.request({
     url: url1+rawValue,
     method: "GET"
  }).then((response) => {
     let status = response.statusCode;
     if (status === 200) {
        let content = JSON.parse(response.content);
        aValue =  content[0].aValue;
        console.log("===>received aValue : " + aValue);
        return aValue;
      }  else if (status === 404) {
         console.log("===> returned [404] ... returning null " );
         return aValue;
      }
   }, (e) => {
      console.log("===> Error occurred " + JSON.stringify(e));
     return aValue;
   });
}

当然,因为http响应在调用它之后结束,所以返回值为null。我可以在控制台日志中看到它,但是已经来不及使用了。我尝试添加一个回调方法来进行我的第二次 http 调用,但我没有掌握它。我不确定是否应该在我的 (status == 200) 块中进行第二次 api 调用,还是有更好的“javascript”(我仍在学习)方法?

【问题讨论】:

  • 如果makeApi1Call返回了httpModule.request返回的Promise,那么你可以简单地使用Promise链
  • 你能详细说明一下吗?我真的在为 Promises、回调而苦苦挣扎。我明白了这个概念,但我似乎无法拼凑出一个来挽救我的生命。
  • 看看httpModule.request({ ... }).then((response) => {是一个Promise链......和return如何从函数返回一个值
  • 我认为,在解析数据之后,返回之前,只需在第一次内进行后续 XHR 调用即可
  • 了解所有关于 Promises 的知识,你可以使用这个link。一旦你理解了 Promise,你就可以轻松处理异步请求了。

标签: javascript nativescript nativescript-vue


【解决方案1】:

  let value1;
  let value2;

  makeApi1Call(rawValue) {

  let aValue = null;

  httpModule.request({
     url: url1+rawValue,
     method: "GET"
  })
  .then((response) => {
      value1 = response.someData
   })
  .then(() => {
      value2 = makeAPIcall2(value1)
   }

我更改了您的代码,以便至少在第一次调用完成之前不会触发您的第二次调用。

【讨论】:

  • 谢谢,我能够以这种方式嵌套我的 HTTP 调用并获得所需的结果。我还将根据@Manoj 提供的链接深入研究 Promises。
猜你喜欢
  • 2023-03-25
  • 2016-09-14
  • 1970-01-01
  • 1970-01-01
  • 2018-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
相关资源
最近更新 更多