函数内的javascript函数不返回数据

时间:2017-03-24 08:58:49

标签: javascript function extjs sencha-touch pouchdb

这是最奇怪的事情,我曾经遇到过。在Sencha Touch中,我定义了一个新类和一些方法。现在问题在于getAll方法 我想在then函数中返回结果,但结果不是returning 当我console时,它会显示结果。什么似乎是问题,我认为它的私人功能,但我如何公开。

当我创建小袋的新实例时,它不会返回我想要的结果

Ext.define('Inertia.view.Pouch', {
    config:{
        database: 'Sencha',
        db: false,
        result: false,
    },

    constructor : function(config) {
        if(config){
            this.setDatabase(config);
        }
        this.setDb(//);
        this.initConfig(config);
    },
    // get All results
    getAll: function(){
        var me = this;
        me.data = 'NO Record found';
       var res = me.getDb().allDocs({
          include_docs: true,
          attachments: true
        }).then(function (result) {

             **// I want this return to be returned when i call getAll()**
             me.data = result;

            // i even tried this
return result;// but its also not working

        }).catch(function (err) {

          console.log(err);

        });

        return  me.data;
    }

});

当我这样做时

var p = new Ext.create('test.view.Pouch', 'sencha');
var data = p.getAll();

显示

  

'没有找到记录';

2 个答案:

答案 0 :(得分:0)

您唯一的方法是返回承诺并从函数中管理数据。 然后在异步中运行,因此数据将仅在其内部定义。

getAll: function(){
        var me = this;
        var res = me.getDb().allDocs({
            include_docs: true,
            attachments: true
        });
        return  res ;
    }
});


var p = new Ext.create('test.view.Pouch', 'sencha');
var data,
    datapromise = p.getAll();
    datapromise.then(function (result) {
         data = result;
         // do your stuff here
    }).catch(function (err) {
          data='NO Record found';
          console.log(err);
    });

答案 1 :(得分:0)

我已经提到你的问题是Promises - 你在Promise有机会实现之前从函数返回了一些东西 - 编辑了你的代码,试试吧

// get All results
getAll: function(){
    var me = this;
    me.data = 'NO Record found';
   var res = me.getDb().allDocs({
      include_docs: true,
      attachments: true
    }).then(function (result) {
         // Possible check results here if no records are found.
         me.data = result;
         return result

    }).catch(function (err) {
      // Handle error here 
      console.log(err);
    });  
}