Как вернуть значение переменной из функции asyn c JS в React Native - PullRequest
0 голосов
/ 02 августа 2020

Я пытаюсь загрузить внешний URL-адрес в приложение React Native, а затем извлечь из него элемент <title>. Я не хочу использовать WebView , поскольку это должно происходить в фоновом режиме. Для этого я использую библиотеку dom-parser . Однако я не могу вернуть значение product_name из findproduct(). При запуске функции она регистрирует правильное значение product_name в консоли, указывая, что код работает нормально. Но проблема возникает, когда я хочу взять значение product_name вне findproduct() и использовать его в другом месте.

async function findproduct(){
  var DomParser = require('dom-parser');
  var parser = new DomParser()
  const html = (await (await fetch(product)).text()); // html as text
  var dom = parser.parseFromString(html);
  const product_name = dom.getElementsByTagName("TITLE")[0].innerHTML;
  console.log("name="+product_name); //this logs correctly
  return product_name;
}
productname = findproduct(); //this logs something else
console.log(productname);

Здесь productname либо не определено, либо что-то вроде {"_U": 0, "_V": 0, "_W": null, "_X": null}. Я поискал, но все, что я понял, это то, что есть другой способ вернуть переменные из async function. Ничего больше. Мне нужно вставить productname в БД. Итак, мне нужно точное значение. Я также пытался дать отсрочку, но безуспешно. И в этом случае задержка вроде бы даже не работает. Он просто регистрирует сначала productname, а затем product_name.

setTimeout(()=>{
  productname = findproduct(product);
  console.log(productname);
},5000)

Что я делаю не так с этой функцией asyn c? Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

2 голосов
/ 02 августа 2020

Функции async возвращают Promise вместо фактического значения. Итак, чтобы получить фактическое значение, вы должны сделать это следующим образом.

findproduct().then((productname) => console.log(productname))

Если вы хотите что-то сделать, вы можете использовать это так ...

findproduct().then((productname) => {
  //do what you want to do with productname
})
1 голос
/ 02 августа 2020

@ Sennen Randika прав, я просто добавляю ресурсы, чтобы вы могли узнать об этом больше, потому что функции и обещания asyn c действительно важны для изучения JavaScript и в целом.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises

https://javascript.info/async-await#: ~: text = Async% 20functions & text = The% 20word% 20% E2% 80% 9Casync% E2% 80% 9D% 20 до% 20a, в% 20a% 20resolved% 20promise% 20 автоматически. & text = Итак,% 2C% 20async% 20ensures% 20that% 20the, обертывает% 20non% 2Dpromises% 20in% 20it .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...