我一直在试图从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');
}
}