无法获得功能性离子以外的承诺值

时间:2018-08-27 13:21:55

标签: angular typescript ionic-framework ionic2 ionic3

我试图在我的职能范围之外获得诺言的价值,但它返回了 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中

外部未定义

我该如何解决?

谢谢!

2 个答案:

答案 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

希望这会有所帮助。