Биксби, Несколько HTTP-вызовов в одной функции Javascript? - PullRequest
0 голосов
/ 12 ноября 2018

Я знаю, что bixby developer Studio - новенькая, но у меня проблема с выполнением двух http-вызовов в одной функции javascript: сначала для получения пользовательского идентификатора из службы, а затем для получения данных из службы на основе этого. идентификатор.

Я пробовал следующие вещи:

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
    })
}

К сожалению, это не вызывает функцию обратного вызова или, по крайней мере, не ожидает завершения второго http-вызова в функции getCoupons, прежде чем вернуться к модели, которую я перечислил в выводе ...

У кого-нибудь есть мысли?

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Я думаю, вы можете просто просто вызвать 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, ваша функция ожидает ответа. Javascript код Биксби работает последовательно. Он не поддерживает асинхронный вызов и многопоточность

0 голосов
/ 12 ноября 2018

Кодирование функций JavaScript в bixby немного отличается, потому что все работает синхронно. Избегайте кода, который опирается на обещания или обратные вызовы, потому что он может не работать.

Вот пример функции из документов, иллюстрирующий 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;
}
...