Добавление свойства к обещанию почти наверняка является плохой идеей (подробнее об этом позже, в разделе Однако ), но просто поговорим о том, как вы будете продолжать это делать:
Интересно, есть ли способ как-то получить этот экземпляр этого обещания внутри функции
Нет, нет.Вы можете создать обещание внутри функции и вернуть его, но это не будет обещанием, которое возвращает функция (это просто повлияет на разрешение обещания, возвращаемого функцией).
Если вы хотите добавить свойствочтобы вернуть обещание, вам придется использовать не async
функцию.Вы можете сделать весь код функции не-async
:
const sleep = ts => new Promise(resolve => setTimeout(resolve, ts));
const getSomePromise = () => {
const p = sleep(1000).then(() => 'success');
p.someProp = 'myProp';
return p;
}
const promise = getSomePromise();
console.log(promise.someProp);
... или использовать внутреннюю функцию async
, чтобы вы могли использовать семантику await
и такие:
const sleep = ts => new Promise(resolve => setTimeout(resolve, ts));
const getSomePromise = () => {
const p = (async () => {
await sleep(1000);
return 'success';
})();
p.someProp = 'myProp';
return p;
}
const promise = getSomePromise();
console.log(promise.someProp);
Однако : Добавление свойства в обещание почти наверняка является плохой идеей.Вместо этого сделайте обещание разрешить объект со свойствами как для разрешения, так и для дополнительных someProp
:
const sleep = ts => new Promise(resolve => setTimeout(resolve, ts));
const getSomePromise = async () => {
const p = await sleep(1000);
// some how access the instance of the promise from within the async function
// for example this['someProp'] = 'myProp';
// and return the all promise with this prop
return {
result: 'success',
someProp: 'myProp'
};
}
getSomePromise()
.then(resolution => {
console.log(resolution.someProp);
});