gpt4 book ai didi

javascript - 对象解构在 Promise 中解析和拒绝

转载 作者:行者123 更新时间:2023-12-05 09:05:41 25 4
gpt4 key购买 nike

对象解构不是我最喜欢的东西,我经常尽量避免使用它。然而,在这种特殊情况下,我太好奇了,无法忽视正在发生的事情。

现在我们可以这样做了;

var o = {},
x = 1,
y = 2;
o = {x,y};
console.log(o); // <- {x: 1, y: 2}

一切都很好;

不过我的情况有点复杂;

var p = function(o){
o.promise = new Promise((resolve,reject) => o = {resolve,reject});
console.log(o) // -< {resolve: ƒ, reject: ƒ}
return o;
}({});
console.log(p); // -< {resolve: ƒ, reject: ƒ}

ppromise 属性在哪里..?所以我用经典的方式来做;

var q = function(o){
o.promise = new Promise((resolve,reject) => ( o.resolve = resolve
, o.reject = reject
));
console.log(o) // <- {promise: Promise, resolve: ƒ, reject: ƒ}
return o;
}({});
console.log(q); // <- {promise: Promise, resolve: ƒ, reject: ƒ}

我有一种奇怪的感觉,好像我错过了一些非常基本的东西,但我又说不出是什么。

最佳答案

您显示的任何代码都没有解构。

您正在将 o 重新分配给具有 2 个属性的简单普通新对象:

o = {resolve,reject}

这只是 object literal shorthand syntax与 ES2015 一起引入并与

o = {resolve: resolve, reject: reject}

当然,之前的 promise 属性会丢失,因为它存在于一个不再被 o 引用的对象上(如果没有,最终将被垃圾回收)内存中对它的其他引用)。

试试

o.promise = new Promise((resolve,reject) => o = { ...o, resolve, reject });

不,...o 也不是解构的,它是 object spread syntax .

你也可以使用

o.promise = new Promise((resolve,reject) => o = Object.assign(o, { resolve, reject }));

请注意,Object.assign() 会触发 setter(如果有),而扩展语法则不会。

关于javascript - 对象解构在 Promise 中解析和拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66877185/

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