Javascript 爱奥尼亚。如何使用存储并获得真正的结果
我一直在拼命地想从爱奥尼亚的持久存储中获取基本信息。这是我从存储器中获取两个密钥的代码(比如用户名和密码) 但是,如果我调用Javascript 爱奥尼亚。如何使用存储并获得真正的结果,javascript,typescript,ionic-framework,promise,ionic2,Javascript,Typescript,Ionic Framework,Promise,Ionic2,我一直在拼命地想从爱奥尼亚的持久存储中获取基本信息。这是我从存储器中获取两个密钥的代码(比如用户名和密码) 但是,如果我调用getMultiple('uesrname''password')这就是我得到的结果: t{{u______ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 而不是 对象{电子邮件:null,密码:null} 这是控制台使用console.log(结果)注销的内容。你知道我为什么没有收到这份回执吗 注意 我已尝试删除返回承诺。
getMultiple('uesrname''password')
这就是我得到的结果:
t{{u______ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
而不是
对象{电子邮件:null,密码:null}
这是控制台使用console.log(结果)注销的内容代码>。你知道我为什么没有收到这份回执吗
注意
我已尝试删除返回承诺。所有…
但是它返回一个未定义的
TLDR
我如何让我的程序等到我得到这个承诺的结果后再返回数据?我不是100%同意这一点,但我认为你在错误地循环你的密钥以使用承诺
我已经使用Array.map重写了您的foreach方法,为您要对单个键/值执行的工作创建一个承诺数组,然后使用Promise.all等待它们。在本例中,我刚刚将每个storage.get()
的result
附加到结果的数组中。只有在所有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;
});
试一试,让我知道。我不是100%同意这一点,但我认为你在错误地循环你的钥匙,以使用承诺
我已经使用Array.map重写了您的foreach方法,为您要对单个键/值执行的工作创建一个承诺数组,然后使用Promise.all等待它们。在本例中,我刚刚将每个storage.get()
的result
附加到结果的数组中。只有在所有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');
}
}
您没有在异步方法中正确写入返回
//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');
}
}
什么是存储对象?火准备好了吗?storage.ready()?你能通过执行storage.keys()从存储器中获取所有密钥吗?我的一般问题是从promise中获取数据。为什么存储是异步的?在应用程序首次加载时,存储中的对象当前为空。但是,如日志所示,可以检索它们。然而,这是在奇怪的t对象被返回后发生的。这是一个超级复制者的好问题。控制台输出live,因此它将表示最终结果,而不一定是您的代码在该时间点读取的内容。这应该向您表明,您实际上是在结果准备就绪之前处理它的,因此您可能在某个地方错误地处理了一个承诺。我怀疑它在存储器中。get(key))
。您可能希望在该语句中添加一个。然后(result=>return result;
。存储对象是什么?它启动了吗?storage.ready()?您可以通过执行storage.keys()从存储中获取所有密钥吗?我的一般问题是从承诺中获取数据。为什么存储是异步的?在应用程序首次加载时,存储中的对象当前为空。但是,正如日志所示,它们可以被检索。但是,在返回奇怪的t对象后,会发生这种情况。这是一个超级复制器的好问题。控制台输出s live,因此它将表示最终结果,而不一定是您的代码在该时间点读取的内容。这应该向您表明,您实际上正在处理一个结果,因此您可能在某个地方错误地处理了一个承诺。我怀疑它在存储中。get(key))
。您可能希望在该语句中添加一个.then(result=>returnresult;
。它没有改变任何内容。我仍然收到相同的坏结果:-(@MHornbacher所以当您运行this.getMultiple.then(result=>{console.log(result)})时)
您没有返回数组吗?没有,我需要将其设置为变量。我通过设计一个解决方法解决了一半的问题:-(。仍然不明白为什么我不能告诉框架等待promise x完成运行,以便返回结果。它没有改变任何东西。我仍然收到同样的坏结果:-(@MHornbacher所以当你运行this.getMultiple.then(result=>{console.log(result)});
你没有得到一个数组吗?不,我需要将它设置为一个变量。我通过设计一个解决方法解决了一半问题:-(.仍然不明白为什么我不能告诉框架等待promise x完成运行,这样我才能得到结果。