这在JavaScript承诺中可能吗?

这在JavaScript承诺中可能吗?,javascript,promise,synchronization,Javascript,Promise,Synchronization,我正在尝试使用JavaScript承诺来生成 x={a:5} 例如: new Promise(resolve => { setTimeout(() => { resolve(5); }, 2000) }).then(v => { x = { a: v }; console.log(x); }) 但是,我想了解如何使用此代码实现同样的效果: x = { a: new Promise(resolve

我正在尝试使用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)
    })
};

请导游。我将负债累累。

不,承诺是不可能的

看来你在承诺是什么或如何实现的问题上被误导了。承诺是一个最终将包含某个未来值的对象,它包含一个方法
。然后(fn)
,通过该方法,您可以注册一个回调,以便在未来值可用时或在尝试获取该值时出错时调用

但是,承诺并没有“变成”未来的价值——它始终是承诺的对象。所以,你不能以你的方式做你所展示的事情。承诺不会变成他们的坚定价值观。它们将解析的值存储在内部,以便在值可用时(或在尝试获取值时出现错误时)通知注册的
.then()
处理程序

由于不清楚您实际要解决的实际问题是什么,我不确定推荐什么代码,但很明显,您不能做您试图做的事情

我想学习如何使用此代码实现相同的功能

这是根本不可能的代码。承诺并非如此


您可以创建一个函数,当承诺得到解决时,该函数最终将
x.a
属性设置为
5
,尽管我不确定为什么不直接在承诺的
.then()
处理程序中进行编码(正如我所说,我不知道您在这里试图解决的是什么实际问题)


不,承诺是不可能的

看来你在承诺是什么或如何实现的问题上被误导了。承诺是一个最终将包含某个未来值的对象,它包含一个方法
。然后(fn)
,通过该方法,您可以注册一个回调,以便在未来值可用时或在尝试获取该值时出错时调用

但是,承诺并没有“变成”未来的价值——它始终是承诺的对象。所以,你不能以你的方式做你所展示的事情。承诺不会变成他们的坚定价值观。它们将解析的值存储在内部,以便在值可用时(或在尝试获取值时出现错误时)通知注册的
.then()
处理程序

由于不清楚您实际要解决的实际问题是什么,我不确定推荐什么代码,但很明显,您不能做您试图做的事情

我想学习如何使用此代码实现相同的功能

这是根本不可能的代码。承诺并非如此


您可以创建一个函数,当承诺得到解决时,该函数最终将
x.a
属性设置为
5
,尽管我不确定为什么不直接在承诺的
.then()
处理程序中进行编码(正如我所说,我不知道您在这里试图解决的是什么实际问题)


您可能正在寻找/wait组合。在您的代码中,
a
属性是承诺对象,而不是承诺的解析值。
我想了解如何使用此代码实现相同的承诺
根本不可能-承诺就是承诺,它永远不会更改为任何其他内容。。。像
5
。。。它是
5
,不能变成
“Hello world”
您可能正在寻找/wait组合。在您的代码中,
a
属性是承诺对象,而不是承诺的解析值。
我想了解如何使用此代码实现相同的承诺
根本不可能-承诺就是承诺,它永远不会更改为任何其他内容。。。像
5
。。。它是
5
,不能变成
“Hello world”
// 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);
});