javascript - 这在 JavaScript promise 中可能吗?

标签 javascript promise synchronization

我正在尝试使用 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/

相关文章:

javascript - 使用换行符解析 JSON 数据

javascript - 如何添加ajax参数?

javascript - 解决/拒绝 promise ,有什么区别?

javascript - 列出内置 JavaScript 标准对象方法

javascript - 编写一个jQuery插件: public methods and multiple plugin instances

javascript - AngularJS中的错误处理 http get then construct

javascript - Promise:链式超时

java - Integer 对象的同步块(synchronized block)

c# - 多线程软件设计

kiicloud 中的 android 和 web app 我可以在 kiicloud 中同步它们的数据吗?