我在 Javascript 中使用 dojo 并编写一个全局函数,其中包含异步函数。 我想连续调用这些函数两次,但我希望第一个调用在调用第二个之前完成。
我现在没有源代码,但结构如下。
initDataStore("store1");
initDataStore("store2");
initDataStore : function(storeName){
var request = openDB(storeName);
request.onUpgradeneed(function(){
//set some global value without return value
});
request.onSuccess(function(){
//set some global value without return value
});
}
我只是尝试使用这样的 promise ,但我不确定它是否有效。
var p = Promise.resolve(initDataStore("store1"));
p.then(function(){initDataStore("store2")});
initDataStore : function(storeName){
var request = openDB(storeName);
request.onUpgradeneed(function(){
//set some global value without return value
return new Promise(function (resolve, reject){resolve("success"});
});
request.onSuccess(function(){
//set some global value without return value
return new Promise(function (resolve, reject){resolve("success"});
});
}
如何正确解决这些问题?
PS。我不需要任何返回值,我只想 initDataStore("store2") 在 onUpgradeneed 或 onSuccess initDataStore("store1") 完成后调用。最佳答案
不,这行不通。你实际上让upgradeneed和success事件函数返回一个promise,但你实际上不让initDataStore返回任何东西......
Promise 是这样工作的:
function init(someParam){
return new Promise(function(resolve, reject){
// do something here
// and call either resolve(someValue) or reject(someValue)
});
}
init("aaa").then(function(val){/*success*/}, function(err){/*error*/});
这应该给我们以下内容:
function initDataStore(storeName){
return new Promise(function(resolve, reject){
var request = openDB(storeName);
request.onUpgradeneed(function(){
reject("Upgrade needed !");
});
request.onSuccess(function(){
resolve("OK !");
});
});
}
initDataStore("store1").then(function(val){
// val contains "OK !"
initDataStore("store2").catch(function(err){/*second one did not work*/});
}, function(err){
// first one did not work
// err contains "Upgrade needed !"
});
关于javascript - 如何使用 Promise 等待函数内的事件完成然后再次调用该函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43544996/