1

我知道 bixby 开发人员工作室是全新的,但我在一个 javascript 函数中进行两个 http 调用时遇到问题,第一个是从服务中获取自定义标识符,第二个是根据该标识符从服务中获取数据。

我尝试了以下事情:

module.exports.function = function(phoneNumber,couponBrand)
{
     if(phoneLookup(phoneNumber))
     {
        return getCoupons(couponBrand)
     }
     else
     {
       return null
     }
}

哪个不调用任何一个函数......所以我尝试调用第一个函数作为先决条件,如下所示:

module.exports = {
  function:getCoupons,
  preconditions:[phoneLookup]
}

哪个不调用函数,而只调用前置条件函数......然后我也尝试了一个非常nodeJS的回调方案,在phoneLookup函数内部我调用了getCoupons函数并将一个函数作为参数传递,然后在结束时getCoupons 函数我调用参数函数作为回调,同时传递在 phoneLookup 函数中获得的值,如下所示:

function getCoupons(json,callback)
{
    var endpoint = //removed for security
    var body = //removed for brevity
    var options = //removed for brevity
    var response = http.postUrl(endpoint,body,options)
    var json = response.parsed
    callback(json)
}

module.exports.function = function phoneLookup(phoneNumber,couponBrand)
{
    var endpoint = //removed for security
    var body = //removed for brevity
    var options = //removed for brevity
    var response = http.postUrl(endpoint,body,options)
    var json = response.parsed

    getCoupons(json,function(results)
    {
        return results
    })
}

可悲的是,这不会调用回调函数,或者至少不会等待 getCoupons 函数中的第二个 http 调用完成,然后再返回到我在输出中列出的模型......

有人有什么想法吗?

4

2 回答 2

1

我认为,您可以简单地按顺序调用 2 个函数。

如下所示,

function getCoupons(json,callback)
{
    var endpoint = //removed for security
    var body = //removed for brevity
    var options = //removed for brevity
    var response = http.postUrl(endpoint,body,options)
    var json = response.parsed
    return json
}

module.exports.function = function phoneLookup(phoneNumber,couponBrand)
{
    var endpoint = //removed for security
    var body = //removed for brevity
    var options = //removed for brevity
    var response = http.postUrl(endpoint,body,options)
    var json = response.parsed

    return getCoupons(json)
}

而且,如果您调用 http.xxxxUrl,您的函数会等待响应。Bixby 的 javascript 代码按顺序运行。它不支持异步调用和多线程

于 2018-11-13T01:20:06.323 回答
1

在 bixby 中编写 JavaScript 函数有点不同,因为一切都是同步运行的。避免使用依赖于承诺或回调的代码,因为它可能不起作用。

这是文档中的示例函数,说明了 HTTP GET。尝试修改它以使用您的代码。

https://github.com/bixbydevelopers/http/blob/master/code/FindShoeFiltering.js

module.exports.function = function findShoe (type) {
  console.log("FindShoe filter by a specific type")
  var options = { 
    format: 'json',
    query: {
      type: type
    }
  };
  // If type is "Formal", then this makes a GET call to /shoes?type=Formal
  var response = http.getUrl(config.get('remote.url') + '/shoes', options);
  return response;
}
于 2018-11-12T17:25:52.373 回答