当 Promise outside 然后完成时做一些事情
Do something when Promise outside then finished
这是代码。
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"); });
}
但 finally 在此之前运行。那我出去之后怎么办呢
我不想在then之后加上finally,因为promise调用的地方很多。所以我想在一个地方做。
也许您可以将回调合并到 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"); });
}
您需要做的是返回一个回调,稍后您可以像这样使用它:
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();
});
}
你的 getPromise()
它本身就是一个 Promise,所以你的 .then()
只有在它结束后才会 运行,在这种情况下,在 .finally()
.[=17= 之后]
您可以将 .then()
放在 getPromise()
里面,或者将 .finally()
移到 .then()
之后的外面。
不,你不能。 promise.then()
returns 一个新的promise,原来的promise
无法得到那个的引用(可能是多个也可能是none,就像一棵树)
相反,您可以将 console.log("then hit")
提供给 getPromise()
作为回调,在创建承诺期间使用。
function getPromise(cb) {
let p = new Promise((resolve, reject) => {
//some logical
resolve();
});
p.then(cb).finally(()=>{
//I want do something when outside then finished!
console.log("finally hit");
});
return p;
}
function doPromise() {
getPromise(data => { console.log("then hit"); });
}
doPromise()
这是代码。
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"); });
}
但 finally 在此之前运行。那我出去之后怎么办呢
我不想在then之后加上finally,因为promise调用的地方很多。所以我想在一个地方做。
也许您可以将回调合并到 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"); });
}
您需要做的是返回一个回调,稍后您可以像这样使用它:
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();
});
}
你的 getPromise()
它本身就是一个 Promise,所以你的 .then()
只有在它结束后才会 运行,在这种情况下,在 .finally()
.[=17= 之后]
您可以将 .then()
放在 getPromise()
里面,或者将 .finally()
移到 .then()
之后的外面。
不,你不能。 promise.then()
returns 一个新的promise,原来的promise
无法得到那个的引用(可能是多个也可能是none,就像一棵树)
相反,您可以将 console.log("then hit")
提供给 getPromise()
作为回调,在创建承诺期间使用。
function getPromise(cb) {
let p = new Promise((resolve, reject) => {
//some logical
resolve();
});
p.then(cb).finally(()=>{
//I want do something when outside then finished!
console.log("finally hit");
});
return p;
}
function doPromise() {
getPromise(data => { console.log("then hit"); });
}
doPromise()