首页 > 解决方案 > 承诺不按顺序返回值

问题描述

您好,我是离子新手,

我想从pouch-db后台获取数据。
经过一番研究,我发现,promise 的概念将解决我的问题。

我想按以下 1、2 和 3 的顺序执行我的控制台日志

这是我的代码:

班级:

class1{

 method1(){
    class2Provider.method2().then(function (result:any) {

      console.log("3")
      console.log("VSCP "+result);
      this.navCtrl.push('InspectionPage',{'inspectnData':result});

   })
 }

}

提供者1:

export class ModelProvider {

 method2(){
  return new Promise (resolve => {

            this.dbHelpr.getRecord().then(function (result:any) {
                console.log("2")
                console.log("data for inspectId is -------------"+JSON.stringify(tempData));
                resolve(result)
            })
        })
 }

}

提供者2:

export class DbHelperProvider {

  getRecord(){

        return new Promise(resolve => {
          this.db.get(_id).then(function (doc) {
            console.log("1")
            resolve(doc);
          }).catch(function (err) {
            console.log(err);
            resolve("fail");
          });
        })


      }
   }

上面的代码首先执行日志 3 并显示错误

无法读取未定义的属性“navCtrl”

如何按我想要的顺序执行功能?

标签: angularionic-frameworkionic2ionic3

解决方案


使用 Fat 箭头函数=>代替function.

class1{

    method1(){
        class2Provider.method2().then((result: any) => {
            console.log("3")
            console.log("VSCP " + result);
            this.navCtrl.push('InspectionPage', { 'inspectnData': result });
        })
    }
}

推荐阅读