我正在尝试使用 JavaScript promises 进行生成。
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)
})
};
请指导。我将负债累累。
最佳答案
不,这对于 promises 是不可能的。
看来您对什么是 promise 或它的工作原理有相当大的误解。 promise 是一个最终将包含一些 future 值的对象,它包含一个方法 .then(fn)
,您可以通过该方法注册一个回调,以便在未来值可用或发生错误时调用在试图获得那个值(value)。
但是,promise 不会“成为” future 的值——它始终是一个 promise 对象。所以,你不能按照你展示的方式去做。 promise 不会变成它们已解决的值(value)。它们在内部存储已解析的值,以便在值可用时(或者在尝试获取值时出现错误)通知已注册的 .then()
处理程序。
由于不清楚您实际上要解决的现实世界问题是什么,我不确定推荐什么代码,但很明显您不能做您想做的事情。
I want to learn how can I achieve the same using this code
用那个代码根本不可能。这不是 promise 的工作方式。
你可以创建一个函数,当 promise 被解决时,最终将 x.a
属性设置为 5
虽然我不确定你为什么不只是编写代码直接在 promise 的 .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);
});
关于javascript - 这在 JavaScript promise 中可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41156600/