json.stringify使对象数组为空



我正在尝试获取一些数据,对其进行过滤,构建对象阵列,然后将其串联。我放了一些控制台。logs弄清楚发生了什么无济于事!

log 1:[7]//在其中带有7个对象的数组

log 2:" []"//这是弦乐版本,只有两个括号

log 3:[0]//解析后,它会倒下一个空数组。

我需要stingform中的数组才能将其保存到asyncstorage。

这是针对一个反应的应用程序,它是现有.NET解决方案的"支持"应用。

这是我的提取:

fetchCallHistory = async () => {
    let calls = [];
    try {
        const granted = await PermissionsAndroid.request(
            PermissionsAndroid.PERMISSIONS.READ_CALL_LOG,
            {
              title: "Call Log Example",
              message: "Access your call logs",
              buttonNeutral: "Ask Me Later",
              buttonNegative: "Cancel",
              buttonPositive: "OK"
            }
        );
      if (granted === PermissionsAndroid.RESULTS.GRANTED) {
          CallLogs.load(200).then(function(history) {
              let todayMinus10 = new Date().getTime() - 864000000;
              let filterDate = history.filter(history => {
                  return parseInt(history.timestamp) >= `todayMinus10;`;
              });
              let filterByType = filterDate.filter(history => {
                  return history.rawType < 3;
              });
              for (let i = 0; i < filterByType.length; i++) {
                  calls.push(filterByType[i]);
              }
            });
      } else {
          console.log("Call Log permission denied");
      }
    } catch (error) {
        console.log(error);
    }
    console.log("log 1: ");
    console.log(calls);
    return (stringifiedCalls = JSON.stringify(calls));
};

这是我称之为的地方:

async componentDidMount() {        
    const callHistory = await this.fetchCallHistory();
    console.log("log 2: ");
    console.log(callHistory);
    let parsedHistory = JSON.parse(callHistory)
    console.log("log 3: ");
    console.log(parsedHistory);
    if (callHistory !== null) {
       this.setState({ callLogs: callHistory, isLoading: false });
    }
}

预期结果:log 1:[7]//阵列中有7个对象

log 2://阵列转换为带有其所有内容的字符串

[{"rawType":1,"type":"INCOMING","dateTime":"17. jun. 2019 09:11:19","timestamp":"1560755479695","name":null,"duration":2698,"phoneNumber":"########"}, ..... ]

log 3:[7]//与

开始的相同数组

实际结果:log 1:[7]//阵列中有7个对象

log 2:" []"//这是弦乐版本,只有两个括号

log 3:[0]//解析后,它返回一个空数组。编辑:此时尚未在此处解析,现在设置用于测试

您正在使用异步等待在许可的代码块中等待急转下面的代码应修复它。

const history = await CallLogs.load(200);
let todayMinus10 = new Date().getTime() - 864000000;
let filterDate = history.filter(history => {
  return parseInt(history.timestamp) >= `todayMinus10;`;
});
...

您的函数'FetchCallhistory'是一个异步函数,它需要创建一个调用数组并在2个异步操作后返回(获取许可,加载调用历史记录(。您正在按照应有的方式在这2个异步操作之前创建呼叫数组。但是,无需等待calllogs.load操作即可完成和填充呼叫数组,您将返回空数组。

所以,您的执行订单如下:

  • 创建呼叫
  • 请求许可
  • 等待请求许可结果(通过等待操作(
  • 请求许可
  • 请求许可
  • 创建登录诺言,但不要等待(在这里错误(
  • 日志,日志
  • 返回电话
  • 执行CallLogs.load回调方法(因为这是在堆栈中,等待结果。您不在等待此操作,因此错误(
  • (

最新更新