React Native - 函数未返回正确的值

时间:2018-01-30 09:24:45

标签: javascript react-native jsx

我有这个小代码片段:

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返回的值。所有这些都发生在异步函数中。

如果有人能够启发我,我会非常感激!

1 个答案:

答案 0 :(得分:2)

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

首先,你需要宣传parseString(如果它还没有那么):

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)await可解析{ {1}})。

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

这是一个易于理解的承诺教程:https://scotch.io/tutorials/javascript-promises-for-dummies