2017-05-28 79 views
0

我想讓IndexedDB適應承諾,但函數checkUrlLink不返回任何值。我怎樣才能解決這個承諾?承諾沒有解決,也沒有返回期望值:

這是我的代碼:

var promise = new Promise(function(resolve) { 
     return checkUrlLink(send_to_url, event); 
    }).then(function(url_link) { 
     console.log('URL LINK in promisse' + url_link); 
     return clients.openWindow(url_link); 
    }); 


function checkUrlLink(send_to_url, event) { 

    return new Promise((resolve,reject) => { 

    var request = indexedDB.open('db', 1); 
    var original_event = event; 

    request.onsuccess = function (event) { 
     //db = event.target.result; 
     var url_link = "url_link"; 
     var store = request.result.transaction("uid", "readwrite").objectStore("uid"); 
     var getRequest = store.get(url_link); 

     getRequest.onsuccess = function() { 
     var result = getRequest.result; 
     if (result) { 
      url_link = result; 
      //send_to_url(original_event,url_link); 
      resolve(url_link); 
     } else { 
      url_link_value = self.registration.scope; 
      store.add(url_link_value, url_link); 
      //send_to_url(original_event, url_link_value); 
      resolve(url_link_value); 
     } 
     }; 
    }; 

    request.onupgradeneeded = function (event) { 
     var db = event.target.result; 
     var store = db.createObjectStore('url_link'); 
    }; 



    }); 



} 

我是一個服務人員內部執行此操作。有沒有必要的 -

+2

你的第一個返回值一個承諾承諾永遠不會解決,因爲你永遠不會解決你的第一個承諾 - 承諾不是majick:p - '但函數checkUrlLink不返回任何值 - 是的,它返回一個承諾 –

+1

'checkUrlLink'返回一個Promise實例,它必須是解決。它不會返回一個值。 – pacifier21

+3

嘗試 - 'var promise = checkUrlLink(send_to_url,event).then(function(url_link){ console.log('URL LINK in promisse'+ url_link); return clients.openWindow(url_link); };' –

回答

2

你即你正在包裝一個返回new Promise內承諾的功能在這裏使用無極構造的反模式

var promise = new Promise(function(resolve) { 
    return checkUrlLink(send_to_url, event); 
}).then(function(url_link) { 
    console.log('URL LINK in promisse' + url_link); 
    return clients.openWindow(url_link); 
}); 

。但是,你永遠不會調用議決,所以這兩個問題的代碼

上面的代碼很簡單

var promise = checkUrlLink(send_to_url, event) 
.then(function(url_link) { 
    console.log('URL LINK in promisse' + url_link); 
    return clients.openWindow(url_link); 
}; 

現在承諾的是將解決由clients.openWindow(url_link);