【问题标题】:How to call resolve after a promise is fulfilled履行承诺后如何调用解决方案
【发布时间】:2021-06-01 16:13:43
【问题描述】:

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

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

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 可以像回调一样工作吗?

【问题讨论】:

    标签: javascript promise callback q


    【解决方案1】:

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

    【讨论】:

    • 感谢您回复我。搜到这个issue,发现Promise的机制不支持我想要的。
    猜你喜欢
    • 2015-11-17
    • 1970-01-01
    • 2022-10-31
    • 2020-12-23
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    相关资源
    最近更新 更多