我有一个Promise功能
function test()
{
let promise = new Promise<string>(function(resolve, reject)
{
func( resolve, reject );
});
return promise;
}
function func(resolve, reject )
{
let reject2 = reject;
window.on( "error", (msg) =>
{
console.log("inside error");
reject2();
} );
// other stuff
}
在错误情况下-我正试图拒绝最初的承诺。
这似乎可行-但是,每次我创建错误条件时,“内部错误”消息都会被打印多次。
谢谢。
答案 0 :(得分:1)
我认为您想在触发处理程序后将其删除。
类似这样的东西:
while read IP
do echo set security zones security-zone 1 address-book address H-$IP $IP/32 -
echo set security zones security-zone 1 address-book address-set GROUP address H-$IP
done <File >new_file
但是这种方法存在一个问题,它将在出现任何错误时删除所有已注册的处理程序,并且我不知道是否需要这样做。
答案 1 :(得分:0)
我不知道您想做什么,我的猜测太长了,无法发表评论,因此请尝试一下。非常确定这是A-> B-> C问题。
!function(){
let errorAttached = false,
currentReject = null;
function test()
{
let promise = new Promise(function(resolve, reject)
{
func( resolve, reject );
});
return promise;
}
function func(resolve, reject )
{
let currentReject = reject;
if(!errorAttached) {
window.on( "error", (msg) =>
{
console.log("inside error");
currentReject();
});
errorAttached = true;
}
// other stuff
}
}();
答案 2 :(得分:-1)
我不明白您为什么要创建一个回调函数来处理诺言的结果。我从来没有用过这种方式。当页面出现问题时,您可能想取消承诺。在这种情况下,您可以按照此页面上的示例进行操作。您将有很多方法来实现它。
https://blog.bloomca.me/2017/12/04/how-to-cancel-your-promise.html
class CancelablePromise {
constructor(executor) {
let _reject = null;
const cancelablePromise = new Promise((resolve, reject) => {
_reject = reject;
return executor(resolve, reject);
});
cancelablePromise.cancel = _reject;
return cancelablePromise;
}
}
// now lets work with the class
var cancelable = false;
const p = new CancelablePromise((resolve, reject) => {
setTimeout(() => {
if(!cancelable)
resolve(console.log('resolved!'));
}, 2000);
})
p.catch(error => console.log(error.toString()));
setTimeout(() => {
cancelable = true;
p.cancel(new Error("Whoops!"));
}, 1000); // change by 3000 to be resolved