将 Request-Promise 与 Falcor 一起使用时出错

Posted

技术标签:

【中文标题】将 Request-Promise 与 Falcor 一起使用时出错【英文标题】:Error while using Request-Promise with Falcor 【发布时间】:2018-03-02 17:24:14 【问题描述】:

我正在尝试使用 Request-Promise (rp) 包对外部 api 进行 Falcor GET 调用。我在“res”(第 8 行)中得到响应,但我无法将其返回到 Falcor 模型路径(第 13 行)。它给出了一个 "Uncaught (in promise)" 错误。

另外,我尝试将 return 语句(第 13 行)放在第 8 行之后的 then 块(即)内。然后它给出 "GET http://localhost/getBusinessTypes... 500 (Internal Server Error)" 错误。

1) router.get('/getBusinessTypes.json', falcorServer.dataSourceRoute(function (req, res) 
2)    return new falcorRouter([
3)        
4)            route: "businessTypes.all",
5)            get: function() 
6)                rp('http://localhost:8000/service?method=getBusinessTypes')
7)                    .then(function (res) 
8)                        console.log("Response from external Api: " + res);
9)                    )
10)                    .catch(function (err) 
11)                        console.log(err);
12)                    );
13)                return path: ["businessTypes", "all"], value: $atom(res);
14)            
15)        
16)    ]);
17) ));

让我知道这里缺少什么。

【问题讨论】:

【参考方案1】:

尝试从 rp() 调用中返回承诺:

router.get('/getBusinessTypes.json', falcorServer.dataSourceRoute(function (req, res) 
  return new falcorRouter([
    route: "businessTypes.all",
    get: function() 
      return rp('http://localhost:8000/service?method=getBusinessTypes')
        .then(function (res) 
          console.log("Response from external Api: " + res)
          return 
            path: ["businessTypes", "all"],
            value: $atom(res)
          
        )
        .catch(function (err) 
          console.log(err)
          // Handle error
        )
    
  ])
))

你可以像这样使用 async/await:

router.get('/getBusinessTypes.json', falcorServer.dataSourceRoute(function (req, res) 
  return new falcorRouter([
    route: "businessTypes.all",
    get: async function() 

      try 
        let result = await rp('http://localhost:8000/service?method=getBusinessTypes')

        console.log("Response from external Api: " + result)
        return 
          path: ["businessTypes", "all"],
          value: $atom(result)
        
      
      catch(err) 
        console.log(err)
        // Handle error
      

    )
  ])
))

【讨论】:

只是出于好奇使用 Async/Await - 我可以在这个例子中使用它吗?你能指导我怎么做吗? 我在我的答案中添加了一个 async/await 版本。我希望这会有所帮助。 是的,它奏效了,而且更容易理解。感谢您的帮助。

以上是关于将 Request-Promise 与 Falcor 一起使用时出错的主要内容,如果未能解决你的问题,请参考以下文章

Falco 进入 CNCF Incubator 项目 | 云原生生态周报 Vol. 35

Sysdig and Falco now powered by eBPF

Request-Promise:承诺缓存结果

request-promise : 下载/检查文件的 MIME 类型?

云开发中got和request-promise

微信云函数使用require('request-promise')进行POST请求 为何content为零