【问题标题】:React Native - Function not returning correct valueReact Native - 函数没有返回正确的值
【发布时间】:2018-01-30 09:24:45
【问题描述】:

我有这个小代码sn-p:

var okidok = parseString(myXml, (err, result) => {
  console.log(result.rss.channel[0].item); //Gives the output that I want.
  return result.rss.channel[0].item;
});

console.log(okidok); //Output is rubbish.

为什么没有给 okidok 赋值,它从parseString 返回。所有这些都发生在异步函数中。

如果有人能赐教,我将非常感激!

【问题讨论】:

  • 我相信即使不使用async,输出也不会返回,而是传递给回调

标签: javascript react-native jsx


【解决方案1】:

如果这发生在 ES7 异步函数中,您可以等待 parseString 函数来解决此问题:

首先你需要承诺parseString(以防它还没有thenable):

function parseStringPromise(text){
   return new Promise((resolve,reject) => {
      parseString(text, (err, result) => {
         if(err) return reject(err);
         return resolve(data);
      });
   });
}

然后您可以await 为这个函数在async function 中获取超出其范围的结果:

async function parseXml(myXml) {
   const result = await parseStringPromise(myXml);
   var okidok = result.rss.channel[0].item;
}

请注意,您可以添加 try/catch 语句来处理异步函数中的错误。

编辑:我忘了告诉你为什么

您不会得到相同的结果,因为parseString 函数是一个节点样式回调(“nodeback”) 异步函数。异步函数意味着您必须等待它解析才能获得结果。异步函数有一些不同的类型,主要的 2 个是基于回调的(如您的 parseString)和承诺(可通过 .then(fn)async functions 中的 await 解析)。 p>

为了在一个函数上使用await,这个函数需要返回一个promise(这就是我们promisifiedparseString的原因)

这是一个更容易理解的 promise 教程:https://scotch.io/tutorials/javascript-promises-for-dummies

【讨论】:

  • 我用一些关于“为什么”的信息和一个解释承诺的链接编辑了我的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多