Aquí está el código.
function getPromise():Promise<any> { let p = new Promise<any>((resolve, reject) => { //some logical resolve(data); }); p.finally(()=>{ //I want do something when outside then finished! console.log("finally hit"); }); return p; } function doPromise():void { a.getPromise().then(data => { console.log("then hit"); }); }Pero finalmente se ejecuta antes de eso. Entonces, ¿cómo puedo hacer algo después de estar afuera?
No quiero agregar finalmente después de eso, porque la promesa llamó a muchos lugares. así que quiero hacerlo en un solo lugar.
¿Quizás puedas incorporar la devolución de llamada en getPromise ?
function getPromise(callback):Promise<any> { let p = new Promise<any>((resolve, reject) => { //some logical resolve(data); }); p.then(callback) p.finally(()=>{ //I want do something when outside then finished! console.log("finally hit"); }); return p; } function doPromise():void { getPromise(data => { console.log("then hit"); }); }Lo que tiene que hacer es devolver una devolución de llamada que puede usar más adelante de esta manera:
type GetPromise = { p: Promise<any>; finalCallback: () => void; } function getPromise():GetPromise { let p = new Promise<any>((resolve, reject) => { //some logical resolve(data); }); finalCallback(()=>{ //I want do something when outside then finished! console.log("finally hit"); }); return {p, finalCallback}; } function doPromise():void { const {p: promise, finalCallback} = getPromise() promise().then(data => { console.log("then hit"); finalCallback(); }); }Su getPromise() es una Promesa en sí misma, por lo que su .then() se ejecutará solo después de que concluya, en este caso, después de .finally() .
Puede colocar .then() dentro de getPromise() o mover .finally() al exterior después de .then() .