Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在get函数内绑定承诺返回_Javascript_Typescript_Ionic2 - Fatal编程技术网

Javascript 在get函数内绑定承诺返回

Javascript 在get函数内绑定承诺返回,javascript,typescript,ionic2,Javascript,Typescript,Ionic2,你好,我是打字稿和角形文字的新手。 我需要在存储中获取一个值,即存储。获取并返回一个承诺,因此我尝试: getNomeUsuario():string{ var that = this; this.storage.get('nomeUsuario').then(function(nome){ that.nomeUsuario = nome; }.bind(this)); return this.nomeUsuario; } 问题是总是返回一个未定

你好,我是打字稿和角形文字的新手。 我需要在存储中获取一个值,即存储。获取并返回一个承诺,因此我尝试:

getNomeUsuario():string{
    var that = this;
    this.storage.get('nomeUsuario').then(function(nome){
        that.nomeUsuario = nome;
    }.bind(this));
    return this.nomeUsuario;
}
问题是总是返回一个未定义的。 我也得到了同样的箭头函数

getNomeUsuario():string{
    this.storage.get('nomeUsuario').then((nome)=>{
        this.nomeUsuario = nome;
    });
    return this.nomeUsuario;
}
如何返回nome值

很抱歉我的英文版呵呵

this.storage.get('nomeUsuario')
异步执行,当您返回
that.nomeUsuario
时,承诺尚未执行,
that.nomeUsuario
仍然未定义。尝试将此
return
插入
中。然后像这样插入
部分:

getNomeUsuario():string{
    var that = this;
    this.storage.get('nomeUsuario').then((nome)=>{
        that.nomeUsuario = nome;
        return that.nomeUsuario;
    });
}
getNomeUsuario(): Promise<string> {
  return this.storage.get("nomeUsuario");   
}

由于
this.storage.get(“nomeUsuario”)
是异步的,因此
getNomeUsuario()
方法无法在不返回承诺的情况下返回其值,因此您需要这样做:

getNomeUsuario():string{
    var that = this;
    this.storage.get('nomeUsuario').then((nome)=>{
        that.nomeUsuario = nome;
        return that.nomeUsuario;
    });
}
getNomeUsuario(): Promise<string> {
  return this.storage.get("nomeUsuario");   
}
getNomeUsuario():承诺{
返回此.storage.get(“nomeUsuario”);
}
并在调用
getNomeUsuario()
的地方处理承诺


ps:您也可以使用Observable,但它会增加复杂性而没有任何好处。

这是因为
getNomeusario()
几乎立即返回
this.nomeusario
,在异步
this.storage.get()之前的当前值
更改
this.nomeUsuario
值。当我尝试在承诺内返回时,我得到一个编译错误,getNomeUsuario需要返回一个字符串;如果我将return改为any getNomeUsuario():any它的编译,但是返回的值是未定义的。嗯,尝试返回
this.storage.get(…
),也像这样:
返回this.storage.get(…
我得到的是一个promisse返回,而不是字符串。@RodrigoSene,是的,这是个坏主意。尝试
console.log(that.nomeUsuario)
that.nomeUsuario=nome;
行之后。结果如何?