Нет, это невозможно с обещаниями.
Похоже, вы ошибаетесь в том, что такое обещание или как оно работает. Обещание - это объект, который в конечном итоге будет содержать какое-то будущее значение, и он содержит метод .then(fn)
, с помощью которого вы можете зарегистрировать обратный вызов для вызова, когда доступно будущее значение, или если возникает ошибка при попытке получить это значение.
Но обещание не «станет» в будущем, оно всегда остается объектом обещания. Таким образом, вы не можете делать то, что вы показываете, как вы его показываете. Обещания не превращаются в их разрешенные ценности. Они сохраняют разрешенное значение внутри, чтобы они могли уведомить зарегистрированных обработчиков .then()
, когда значение становится доступным (или если есть ошибки, пытающиеся получить значение).
Поскольку непонятно, что проблема реального мира в том, что вы на самом деле пытаетесь решить, я не уверен, какой код рекомендуется, но ясно, что вы не можете делать то, что вы пытаетесь сделать ,
Я хочу, чтобы узнать, как я могу добиться того же с помощью этого кода
Это просто невозможно с этим кодом. Это не то, как обещают работу.
Вы могли бы создать функцию, которая в конечном итоге установить 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);
});
Вы, вероятно, ищете [асинхронном] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function)/ждет комбинацию. В вашем коде свойство 'a' является объектом обещания, а не разрешенной стоимостью обещания. – undefined
'Я хочу узнать, как я могу добиться того же, используя этот код ', вообще невозможно - обещание - это обещание, оно никогда не меняется ни на что другое ... например' 5' ... это '5', это может 'превращаемся в "Hello world" ' –