- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我试图理解 resolve(thenable)
和 resolve('non-thenable-object')
之间的区别。
在下面的示例中,使用 promise 而不是 thenable
,因为 promise 也是 thenable
并且可能更容易理解。
resolve(promise)
let resolvePromise = new Promise(resolve => {
let resolvedPromise = Promise.resolve()
resolve(resolvedPromise)
})
resolvePromise.then(() => {
console.log('resolvePromise resolved')
})
let resolvedPromiseThen = Promise.resolve().then(res => {
console.log('promise1')
})
resolvedPromiseThen
.then(() => {
console.log('promise2')
})
.then(() => {
console.log('promise3')
})
结果:
resolve('non-thenable-object')
let resolvePromise = new Promise(resolve => {
resolve('non-thenable-object')
})
resolvePromise.then(() => {
console.log('resolvePromise resolved')
})
let resolvedPromiseThen = Promise.resolve().then(res => {
console.log('promise1')
})
resolvedPromiseThen
.then(() => {
console.log('promise2')
})
.then(() => {
console.log('promise3')
})
结果:
所以,我检查了规范并找到了 Promise Resolve Functions.然后到了PromiseResolveThenableJob和 EnqueueJob .
所以,根据规范,我认为 demo1 就像
let resolvePromise = new Promise(resolve => {
let resolvedPromise = Promise.resolve()
// resolve(resolvedPromise)
// works like
Promise.resolve().then(() => {
Promise.resolve(resolvedPromise).then(() => {
resolve()
})
})
})
resolvePromise.then(() => {
console.log('resolvePromise resolved')
})
let resolvedPromiseThen = Promise.resolve().then(res => {
console.log('promise1')
})
resolvedPromiseThen
.then(() => {
console.log('promise2')
})
.then(() => {
console.log('promise3')
})
我认为是因为Promise Resolve Functions说:
- Perform EnqueueJob("PromiseJobs", PromiseResolveThenableJob, « promise, resolution, thenAction »).
This Job uses the supplied thenable and its then method to resolve the given promise. This process must take place as a Job to ensure that the evaluation of the then method occurs after evaluation of any surrounding code has completed.
此外,我认为 demo2 的工作方式类似于
//let resolvePromise = new Promise(resolve => {
//resolve('str')
//})
//works like
let resolvePromise = Promise.resolve('str')
resolvePromise.then(() => {
console.log('resolvePromise resolved')
})
let resolvedPromiseThen = Promise.resolve().then(res => {
console.log('promise1')
})
resolvedPromiseThen
.then(() => {
console.log('promise2')
})
.then(() => {
console.log('promise3')
})
If IsCallable(thenAction) is false, then Return FulfillPromise(promise, resolution).
虽然Demo1-Demo3和Demo2-Demo4的结果是一样的,但我还是不确定如果我是对的。所以,我来问一下
我的逻辑是否正确?如果不是,你如何解释不同的命令 在 resolve(thenable)
和 resolve(non-thenable)
之间?
最佳答案
是的,你的逻辑看起来是对的。
new Promise(resolve => resolve('non-thenable-object'))
等价于 Promise.resolve('non-thenable-object')
所有目的。
不过,在您的 Demo3 中,我建议省略 Promise.resolve(resolvedPromise)
。我不确定这是不是故意的,但是 Promise.resolve
确实有一个快捷方式,当它的参数已经是一个 promise 时,然后按原样返回 resolvedPromise
.你宁愿写
new Promise((resolve, reject) => {
let resolvedPromise = Promise.resolve();
// resolve(resolvedPromise) works like
Promise.resolve().then(() => resolvedPromise.then(resolve, reject));
});
关于javascript - resolve(thenable) 和 resolve ('non-thenable-object' ) 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53894038/
问题是标题。我正在尝试更深入地了解 promises,我想我已经弄清楚了 Promise.resolve(thenable) 的工作原理,或者至少大部分是如何工作的,查看 MDN 上的示例。我想知道两
我试图理解 resolve(thenable) 和 resolve('non-thenable-object') 之间的区别。 在下面的示例中,使用 promise 而不是 thenable,因为 p
我正在尝试创建一个返回值但不工作的 thenable 对象: const fetchItem = () => 'item'; function test() { return { asyn
如何在返回 Deferred.promise() 的函数之后运行返回 promise 的函数? 我在 JSFiddle 上有一个问题示例.警报消息旨在以“第三次执行?”结尾。而不是在“首先执行?”中间
我知道 thenable 具有 then 方法,但是 Promise 如何知道 thenable 对象的状态已转为拒绝? 示例:在这里,$.ajax 是一个 thenable,如果你这样做的话,可以将
这个问题已经有答案了: How to return many Promises and wait for them all before doing other stuff (6 个回答) How d
thenable 链接如何异步?看起来从上一个 Promise.then 返回的 promise 正在阻塞(其意图本身就是按照下面给出的示例阻塞)下一个 Promise.then 在链中。我对 Nod
我的项目中有这样的代码: co(function *asyncFn() { let browser = yield someAsyncOperation(); return brows
我有一个函数接受 thenable(具有 then() 方法的对象;参见 MDN JavaScript docs: Promise.resolve() 的顶部)或其他: function resolv
我有一个函数可以返回 firebase firestore 查询的快照。如下: export async function getClientWorkflowsFromFirebase(clientI
我正在使用 faye browser client使用 promises,我有一个函数可以在执行异步操作后创建一个 faye 客户端,如下所示: function fayeClient() { r
我认为到目前为止我采取的一个原则是: A promise is a thenable object, and so it takes the message then, or in other wor
我正在开发一个用 F# 编写的 vscode 扩展,使用 Fable 编译成 javascript。许多 api 返回一个 promise 。解析具有返回类型(例如 Thenable)的 promis
我想知道自定义“thenables”(又名带有 .then() 方法的对象)是否被批准/记录?它们与真正的 Promise 相比如何?我想这很重要,那么您如何实现,所以我想知道是否有包含一些 DO 和
这个安全装置有必要吗? Promise.all([...].map((thenable) => Promise.resolve(thenable))); 是否可以安全地将 thenable 提供给收集
这个问题在这里已经有了答案: Does await await promise-like objects? [duplicate] (2 个答案) Custom thenables: Can I c
根据loopback's official docs ,updateAll方法有3个参数:where、data、callback,其中callback为必填项。 Account.deleteSingl
这个问题在这里已经有了答案: Does await await promise-like objects? [duplicate] (2 个答案) Custom thenables: Can I c
当我尝试验证如下条件时。 var val1 = "ONE"; var val2 = "TWO"; expect(val1==val2).to.eventually.equal(false) 我得
根据 MDN: ...if the value is a thenable (i.e. has a "then" method), the returned promise will "follow"
我是一名优秀的程序员,十分优秀!