鉴于我创建了myPromise
。
它结算时返回另一个promise
。
let myPromise = new Promise((resolve: Function, reject: Function) => {
setTimeout(() => {
resolve('my promise resolved after 2 seconds');
}, 2000);
})
myPromise.then(value => {
console.log(value);
}).then((value) => {
// how can I make the promise returned by myPromise.then()
//resolve in a specific way ?
})
如何控制promise
退回的myPromise.then()
结算方式?
答案 0 :(得分:0)
如果您不需要执行其他异步操作,只需返回值:
myPromise.then(value => {
return value;
}).then((value) => {
// ...
})
但我不确定你为什么这样做,考虑到你可以删除第一个.then
并在第二个.then
中执行所有操作。
如果您必须执行另一项异步操作,您可以在需要时返回新的承诺并解决:
myPromise.then(value => {
// Do some other async operation. I am explicitly creating the promise
// here inline to be clear. In real code, you'd probably want to wrap this
// in another function.
return new Promise((resolve: Function, reject: Function) => {
resolve(value);
});
}).then((value) => {
// ...
})
答案 1 :(得分:0)
在.then()
处理程序中,您有三个选项都会影响.then()
调用返回的承诺(我将其称为“父”承诺)。
返回一个值。当您从.then()
处理程序返回一个值时,该值将成为.then()
时返回的promise的已解析值原来叫做。
返回一个承诺。当您从.then()
处理程序返回一个承诺时,它将被链接到父承诺,而父承诺将“跟随”新承诺(解决/价值,拒绝/理由)。
抛出异常。这将导致父承诺被拒绝,异常成为拒绝原因。
如果您从.then()
处理程序返回的内容与return undefined
相同,那么它只会将已解析的值设置为undefined
(与返回undefined
的值相同)。
您显示的结构:
myPromise.then(value => {
console.log(value);
}).then((value) => {
// how can I make the promise returned by myPromise.then()
//resolve in a specific way ?
});
很麻烦,因为第一个.then()
处理程序没有返回任何内容。这与返回undefined
相同,因此第二个value
始终为undefined
,因此无用。如果你有第一个.then()
处理程序的实际原因,你可以通过这样返回它来保持所需的值:
myPromise.then(value => {
console.log(value);
return value;
}).then((value) => {
// how can I make the promise returned by myPromise.then()
//resolve in a specific way ?
});