离子的.如何使用存储并获得真正的结果



我一直在试图从ionic的持久存储中获取基本信息。这是我从存储中获取几个密钥的代码(例如用户名和密码(

export const getMultiple = function(storage, keys: string[]) {
  const promises = [];
  keys.forEach( key => promises.push(storage.get(key)) );
  return Promise.all(promises).then( values => {
    const result = {};
    values.map( (value, index) => { 
      result[keys[index]] = value; 
    });
    console.log(result);
    return result;
  });
}

但是,如果我打电话给getMultiple('uesrname' 'password')这是我得到的结果:

t {__zone_symbol__state: null, __zone_symbol__value: Array[0]}

而不是

对象 {电子邮件: 空, 密码: 空}

这就是控制台注销的内容 console.log(result); .知道为什么我没有收到这份退货声明吗?

注意我试图删除return Promise.all ...但是它会返回一个undefined

TLDR如何让我的程序等到我从这个承诺中得到返回数据的结果?

我不是 100% 的,但我认为您在使用承诺时错误地循环了密钥。

我已经使用 Array.map 重写了您的 foreach 方法,为您想要对各个键/值执行的工作创建一个承诺数组,然后使用 Promise.all 等待它们。在此示例中,我刚刚将每个storage.get()result附加到results数组中。只有在所有storage.get()调用成功响应后,才会返回结果数组。我认为这就是你想要的。

export const getMultiple = function(storage, keys: string[]) {
    let results = [];
    // Use a map
    return Promise.all(keys.map(key => {
        return storage.get(key).then(result => {
            // Perform some action on the result - add to an array, or whatever.
            results.push(result);
            return result;
        });
    })).then(() => {
        // This will run after all the promises have been resolved.
        return results;
    });

试一试,让我知道。

您没有在异步方法中正确写入返回。

//Call this method from anyhwere u want to store the data in local Storage.
 setToLocalStorage(key, value) {
if (key && value) {
 // console.log(key, ' is set to local storage and value :', value);
  this.storage.set(key, value);
}
else {
  console.log(key, value, 'is null or undefined');
}
}
 //Call this method from anywhere u want to get data.
 async getFromLocalStorage(key) {
 if (key) {
 // console.log(key, ' is get to local storage');
  return await this.storage.get(key);
 }
else {
  console.log(key, 'is null or undefined');
}
}

相关内容

  • 没有找到相关文章