如何在承诺完成后调用 resolve

How to call resolve after a promise is fulfilled

我有一个对话框有单选按钮和确认按钮。
在单击确认按钮之前,我们不知道调用了什么函数。\

所以我创建了一个对象来引用回调函数,如下所示。

var context = {
 callback: undefined;
 resolve: undefined;
 reject: undefined;
}

dialog.open = function(callback){
 context.callback = callback;
 
 return new Promise((resolve, reject) =>{
  context.resolve = resolve;
  context.reject = reject;
 }) 
}

确认函数喜欢这样;

function confirm () {
 if(radio.value === "test") callA();
 else callB();
}

function callA() {
  context.callback("A");
  context.resolve("A");
}

function callB() {
  context.callback("B");
  context.resolve("B");
}

然后我调用 dialog.open()

dialog.open((res) => {
 console.log(res)
}).then((res) => {
 console.log(res)
})

为了测试,我点击了多次确认按钮。 每次单击都会调用回调,但会调用一次 resolve(then)..

是否有可能 promise.then 像回调一样工作?

当您第一次点击确认按钮时,confirm() 将被调用,因此 context.callback() 和 context.resolve() 将被调用。当 context.resolve() 被调用时,它解决了承诺,即将其内部状态从未决更改为已解决。
现在,在随后点击确认按钮时,同样的事情发生了,但由于承诺已经解决(通过第一次点击),即使 context.resolve() 被调用也没有任何反应。
至于 then(),它接受一个回调函数作为参数。当承诺解决或拒绝时(仅限第一次),异步调用此回调函数。您可以通过 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then 详细了解 then() 的工作原理。