如果执行者未解决ES6 JavaScript承诺,可以通过其他任何方式解决吗?

如果以这种方式创建承诺:

myPromise = new Promise(function(resolve,reject) {});

这个诺言可以通过任何方式解决吗?显然,在这种情况下,执行者无法解决问题,那么诺言能否得到解决?

我认为如果它是jQuery,则可以用deferred.resolve()来解决,以便解决相关的承诺deferred.promise()

sin777sin 回答:如果执行者未解决ES6 JavaScript承诺,可以通过其他任何方式解决吗?

否,分别只能通过resolvereject函数来解决诺言。

如果不调用或不公开这些功能,则承诺将永远保持待处理状态。

这也是一个安全级别,因为它可以帮助您确保等待的承诺将分解为您期望的值和期望的值;并允许您安全地返回内部承诺(没有任何危险或泄露秘密)。

要做出承诺,它依赖于您没有控制权的另一个承诺,但是可以手动解决(或拒绝)它,而无论原始的是什么,都可以使用Promise.race()函数:

//The original promise that may pend forever
const original = new Promise(()=>{})

//Controller promise,whose resolver is exposed (or contains the logic needed for "manual" resolution)
let resolve
const controller = new Promise(rs=>{resolve=rs})

//The promise you wait for (and can be resolved or rejected either by `original` or `controller`)
const mixed = Promise.race([original,controller])

mixed.then(console.log)

setTimeout(()=>resolve('Resolved'),2000)

,

以上解决方案都不错,但我认为我们可以创建单独的函数/类/任何使其更密封的

function CreatePromise (executor) {
    let resolve;
    let reject;

    const promise = new Promise((res,rej) => {
        resolve = res;
        reject = rej;
        executor(res,rej)
    })

    return {
        resolve,reject,promise
    }
}

const { reject,promise } = CreatePromise((resolve) => {
    setTimeout(() => {
        resolve()
    },100000)
})
本文链接:https://www.f2er.com/2831707.html

大家都在问