我知道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调用完成,然后再返回输出中列出的模型...
有人有什么想法吗?
答案 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代码按顺序运行。它不同时支持异步调用和多线程