Bixby,在单个JavaScript函数中进行多个HTTP调用?

时间:2018-11-12 06:25:45

标签: javascript bixby

我知道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调用完成,然后再返回输出中列出的模型...

有人有什么想法吗?

2 个答案:

答案 0 :(得分:1)

在bixby中对JavaScript函数进行编码有点不同,因为所有内容都是同步运行的。避免使用依赖于promise或回调的代码,因为它可能行不通。

这是文档中的示例函数,说明了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;
}

答案 1 :(得分: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代码按顺序运行。它不同时支持异步调用和多线程