gpt4 book ai didi

javascript - 我如何推迟像 jquery Deferred 这样的 ES6 promise?

转载 作者:数据小太阳 更新时间:2023-10-29 05:54:09 25 4
gpt4 key购买 nike

1。使用es6 promise,但语法不正确。

我正在使用 es6,并且想做一个延迟的确认对话框:

// First, create an empty promise:
let promise = new Promise((resolve, reject) => {})

// Then, show the dialog:
let $dialog = $('#dialog-confirm').show();

// FAIL: I want to trigger the promise resolver, but failed.
$dialog.find('.btn-yes').click(() => { promise.resolve(); })
$dialog.find('.btn-no').click(() => { promise.reject(); })

当我点击按钮时,它失败了,因为 promise 没有 rejectresolve 方法。

Uncaught TypeError: promise.resolve is not a function(…)

2。 jQuery 工作代码:

如果使用 jQuery,我们可以执行以下操作:

// First, create an empty promise:
var dfd = $.Deferred();
var promise = dfd.promise();

// Then, show the dialog:
var $dialog = $('#dialog-confirm').show();

// SUCCESS: jQuery deferred works
$dialog.find('.btn-yes').click(() => { dfd.resolve(); })
$dialog.find('.btn-no').click(() => { dfd.reject(); })

3。尝试为 es6 找到延迟接口(interface)。

所以我搜索了 deferred 的 ES6 EDITION:

https://github.com/seangenabe/es6-deferred

但是还是报错:

undefined:1 Uncaught (in promise) Object {}

实际上,代码只是将内部的resolvereject 函数用闭包保持在外面:

https://github.com/seangenabe/es6-deferred/blob/master/deferred.js

如果我这样做,同样的策略:

let dfd = {};

let $dialog = $('#dialog-confirm').show();

let promise = (function() {
return dfd.promise = new Promise(function(resolve, reject) {
dfd.resolve = resolve;
dfd.reject = reject;
});
})();

// FAIL: still not working.
$dialog.find('.btn-yes').click(() => { dfd.resolve(); })
$dialog.find('.btn-no').click(() => { dfd.reject(); })

那么,我怎样才能从我的 promise 创建调用中提取 resolvereject 操作?

最佳答案

对于那些从谷歌来到这里的人来说,值得一提的是 ES6 promise 很好,我经常使用它们。但是,在某些用例中,延迟模式会导致代码显着减少。在大多数情况下,您应该只使用 ES6 promise,但在延迟模式有意义的特殊情况下,包装 ES6 promise 就足够容易了。在我看来,包含一个节点模块似乎有点过头了。

function generateDeferredPromise() {
let resolve, reject;
const promise = new Promise((res, rej) => {
[resolve, reject] = [res, rej];
});
return {promise, reject, resolve};
}

关于javascript - 我如何推迟像 jquery Deferred 这样的 ES6 promise?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38418256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com