2015-10-04 3 views
-1

Я использую асинхронное обслуживание и получаю данные. Эта часть в порядке, но когда я пытаюсь установить эти данные, а затем получить из объекта - пустое значение. PLease проверить мой код ниже, почему getPage() возвращает false?JS: асинхронный api, конечный результат всегда пуст

var PageName = function() { 
    this.page = false; 

    this.getPage = function() { 
     return this.page; 
    }; 

    this.setPage = function(pageId) { 
     this.page = pageId; 
     console.log(pageId); //Get correct result 
    }; 

    this.savePage = function(callback) { 
     chrome.storage.sync.get('pageId', function (obj) { 
      pageId = obj.pageId; 
      callback(pageId); 
     }); 
    }; 
}; 

var page = new PageName(); 
page.savePage(page.setPage); 

setInterval(function(){ 
    console.log(page.getPage()); //always get default result - false 

}, 4000); 

ответ

2

page.setPage необходимо связать страницей. Посмотрите на первый пример на этом сайте https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind В качестве альтернативы вы также не можете использовать this. Тогда вам не нужно связывать функцию. , например.

var PageName = function() { 
    var page = false; 

    function getPage() { 
     return page; 
    } 
    function setPage(pageId) { 
     page = pageId; 
    } 
    function savePage(callback) { 
     chrome.storage.sync.get('pageId', function (obj) { 
      setPage(obj.pageId); 
      callback(obj.pageId); 
     }); 
    } 

    return { 
     getPage: getPage, 
     setPage: setPage, 
     savePage: savePage 
    }; 
} 

var page = PageName(); 
page.savePage(function(pageId) { 
    console.log("pageId = " + pageId); 
    console.log("page.getPage() = " + page.getPage()); 
}); 

В этом примере я также удалил использование setInterval, так как я не думаю, что это имеет много смысла. кстати. Вот некоторые интересные статьи о шаблонах создания объектов javascript. http://www.samselikoff.com/blog/some-Javascript-constructor-patterns http://www.codeproject.com/Articles/687093/Understanding-JavaScript-Object-Creation-Patterns

Смежные вопросы