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完成运行,这样我才能得到结果。