我正在尝试使用JavaScript承诺。
x = {a:5}
示例:
new Promise(resolve => {
setTimeout(() => {
resolve(5);
}, 2000)
}).then(v => {
x = {
a: v
};
console.log(x);
})
但是,我想了解如何使用此代码实现相同目标:
x = {
a: new Promise(resolve => {
setTimeout(() => {
resolve(5);
}, 2000)
})
};
请指导。我将欠债。
答案 0 :(得分:4)
不,承诺是不可能的。
您似乎对于承诺是什么或如何运作相当误导。 promise是一个最终将包含一些未来值的对象,它包含一个方法.then(fn)
,通过该方法可以在未来值可用时注册要调用的回调,或者在尝试获取该值时发生错误。
但是,承诺不会成为"未来的价值 - 它始终是一个承诺对象。所以,你不能以你展示它的方式做你所表现的。承诺不会变成他们的解决价值。它们在内部存储已解析的值,以便在值可用时(或者在尝试获取值时出现错误)通知已注册的.then()
处理程序。
由于我们不清楚你真正试图解决的现实世界问题是什么,我不确定要推荐什么代码,但很明显你不能做你自己的事情。 #39;重新尝试。
我想学习如何使用此代码实现相同的目标
使用该代码根本不可能。这不是承诺的工作方式。
您可以创建一个函数,在承诺解决后最终将x.a
属性设置为5
,但我不确定您为什么不直接编写代码承诺的.then()
处理程序(正如我所说,我不知道你在这里试图解决的现实问题)。
// set obj[prop] to the resolved value of the promise p
function setProp(p, obj, prop) {
return p.then(function(val) {
obj[prop] = val;
});
}
let x = {};
let p = new Promise(resolve => {
setTimeout(() => {
resolve(5);
}, 2000);
});
setProp(p, x, "a").then(function() {
console.log(x);
});