Javascript 承诺不解析且不返回预期值:
我试图将IndexedDB改编为承诺,但函数checkUrlLink不返回任何值。我怎样才能兑现这个承诺 这是我的代码:Javascript 承诺不解析且不返回预期值:,javascript,promise,service-worker,Javascript,Promise,Service Worker,我试图将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);
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');
};
});
}
我在一个服务人员内部执行此操作。您在这里使用的是承诺构造函数反模式
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);
});
i、 e.您正在包装一个函数,该函数在新承诺
中返回一个承诺-不需要这样做。但是,您也从未调用resolve,因此该代码存在两个问题
上面的代码很简单
var promise = checkUrlLink(send_to_url, event)
.then(function(url_link) {
console.log('URL LINK in promisse' + url_link);
return clients.openWindow(url_link);
};
现在promise是一个promise,它将解析为
clients.openWindow(url\u链接)返回的值代码>您在这里使用的是承诺构造函数反模式
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);
});
i、 e.您正在包装一个函数,该函数在新承诺
中返回一个承诺-不需要这样做。但是,您也从未调用resolve,因此该代码存在两个问题
上面的代码很简单
var promise = checkUrlLink(send_to_url, event)
.then(function(url_link) {
console.log('URL LINK in promisse' + url_link);
return clients.openWindow(url_link);
};
现在promise是一个promise,它将解析为clients.openWindow(url\u链接)返回的值
您的第一个承诺永远不会解决,因为您永远不会解决您的第一个承诺-承诺不重要:p-但函数checkurlink不返回任何值
-是的,它返回一个承诺checkurlink
返回一个必须解决的承诺实例。它不返回值。try-var promise=checkUrlLink(发送到url,事件)。然后(函数(url链接){console.log('promisse中的url链接'+url链接);返回客户端。openWindow(url链接);};
你的第一个承诺永远不会解决,因为你永远不会解决你的第一个承诺-承诺不是majick:p-但是函数checkurlink不返回任何值
-是的,它返回一个承诺checkurlink
返回一个必须解决的承诺实例。它不返回值。try-var promise=checkUrlLink(发送到url,事件)。然后(函数(url链接){console.log('url-link in-promisse'+url链接);返回客户端。openWindow(url链接);};