2015-04-04 49 views
-1

getId導致錯誤無法讀取未定義的屬性'then'。它在返回Promise.resolve(r)之前等待fetchIDs諾言被解決(GET請求完成)。JavaScript承諾 - 無法讀取未定義的屬性'then'

function fetchIDs() { 
    return new Promise (function (resolve, reject){ 
    // GET request 
    }); 
}; 

function getId() { 
    if (typeof localStorage.id !== 'undefined') { 
    return Promise.resolve(localStorage.id); 
    } 
    else { 
    fetchIDs().then(function (r) { 
     return Promise.resolve(r); 
    }); 
    } 
}; 

getId().then(function (r) { 
    localStorage.id = r; 
    doSthElse(); 
}); 

任何想法我在這裏失蹤或做錯了什麼?謝謝。

+3

如果localstorage中沒有任何內容,getId將不返回任何內容。 – 2015-04-04 22:50:28

+0

我應該編輯它,它在第一個條件下正常工作。使用fetchIDs()時會出現問題,然後 – Eytyy 2015-04-04 22:55:12

+1

您不會返回'fetchIDs()。then'的值。你只是在調用它。改成'return fetchIDs()。then ...' – brianvaughn 2015-04-04 22:55:41

回答

1

getId()如果您最終致電fetchIDs(),則不會返回任何內容。你可以改變它是這樣的:

function getId() { 
    if (typeof localStorage.id !== 'undefined') { 
    return Promise.resolve(localStorage.id); 
    } 
    else { 
    return fetchIDs().then(function (r) { 
     return Promise.resolve(r); 
    }); 
    } 
}; 

但是,你實際上並不需要額外的Promise.resolve(r),可以只是這樣做:

function getId() { 
    if (typeof localStorage.id !== 'undefined') { 
    return Promise.resolve(localStorage.id); 
    } 
    else { 
    return fetchIDs(); 
    } 
}; 

將從fetchIDs()其中主叫返回的承諾getId()可以使用。

+0

是的,你說得對,我必須承認一個愚蠢的錯誤。自從布賴恩在評論中指出它以來,我已經修復了它。謝謝一堆。 – Eytyy 2015-04-06 01:04:24

相關問題