我试图在我的职能范围之外获得诺言的价值,但它返回了 undefined
这是我尝试过的代码:
Home.ts
class Home{
dd:any;
constructor(public dbHelpr:DbHelperProvider){
}
getData(){
this.dbHelpr.getRecordById("51").then(function(res:any){
dd = res
console.log("dd in "+dd);
});
console.log("dd out "+dd);
}
}
DbHelperProvider.ts
getRecordById(_id){
return new Promise(resolve => {
this.db.get(_id).then(function (doc) {
resolve(doc);
}).catch(function (err) {
console.log(err);
resolve("fail");
});
})
}
我的日志显示: dd在abcdef中
外部未定义
我该如何解决?
谢谢!
答案 0 :(得分:0)
由于console.log("dd out "+dd);
在console.log("dd in "+dd);
之前被调用(由于Promise的异步特性),因此dd out
的定义变得不确定。
将doc
分配给.then
内部的全局变量,即
this.db.get(_id).then(function (doc) {
resolve(doc);
// assign to global var here.
})
答案 1 :(得分:0)
问题是您没有使用window.initFloof = function (callback) {
let val1 = 22; // Sample value
if (callback !== null) {
if (typeof callback === "function") {
callback(22);
}
}
}
//this declaration is first
window.callbacky= function (val1) {
console.log(val1);
};
//this call is second
window.initFloof(window.callbacky);
。在回调中使用commom函数将不会授予对其外部变量的访问权限,您需要在回调中使用arrow function
。另外,您还需要使用arrow function
来访问课程的this
属性
dd
还有VicJordan关于异步的内容,因为第二个getData(){
this.dbHelpr.getRecordById("51").then((res:any) => {
console.log("dd in " + this.dd); // prints undefined
this.dd = res;
console.log("dd out " + this.dd); // prints the value
});
}
在外部被调用,并且您的console.log
属性未使用任何值初始化,因此它将为dd
。
希望这会有所帮助。