>我正在尝试在称为事件侦听器的外部函数中resolve
一个承诺。问题是,Promise 根本不会等待resolve
回调。
另外,请记住,我需要使用普通ES5的解决方案。
叫:
render(map)
.then(function(road){ return paint(road, map, imgs) })
.then(function(){ asyncListen(keyhandler, ['numeric']) }) //should waiy by user input...
.then(function(r){ console.log('resolved: ' + r) }); //... but this logs undefined before it
异步侦听器:
function asyncListen(handler, keys){
return new Promise(function(resolve, reject){
var keyhandler = handler.call(this, resolve);
document.addEventListener("keyup", keyhandler);
keys.forEach(function(key){
var upperKey = key.toUpperCase();
var objKey = iAppLib.keys[upperKey];
upperKey === 'NUMERIC' ? iAppLib.registerRcuEvent(objKey, keyhandler) : iAppLib.registerRcuEvent(objKey);
});
iAppLib.registerAllRcuEvents(function() { return false; });
});
}
密钥处理程序:
function keyhandler(resolve){
return function(num){
if (num >= 1 && num <= 4){
resolve(num);
}
}
}
我已经尝试了一些解决方法,例如将 de event 和 keyhandler
包装在 Promise 中,但没有成功。这里和这里的解决方案也是如此。
返回asyncListen
:
render(map)
.then(function(road){ return paint(road, map, imgs) })
.then(function(){ return asyncListen(keyhandler, ['numeric']) }) //should waiy by user input...
.then(function(r){ console.log('resolved: ' + r) });