[英]Javascript pattern for handling finished promise
我時不時遇到這個:
return somethingThatReturnsAPromise()
.then((response) => {
soSomethingg(); // Eg; update the UI
return response;
});
現在,我正在尋找一種不會返回任何東西的東西,並且如果我忘記了,則不會更改諾言鏈:
return somethingThatReturnsAPromise()
.whatImLookingFor((response) => {
doSomething(); // Eg; update the UI
})
.then((response) => {
// and this one should still be able to access response
});
也許這與承諾的概念背道而馳,但是對我來說,這有點不方便,因為我無法傳遞任意函數。
一種想法是組成一個函數:
const sideEffect = (callback) => {
return (response) => {
callback(response);
return response;
};
};
我可以將其用作
return somethingThatReturnsAPromise()
.then(sideEffect(doSomething));
但我喜歡的東西,而不是then
有這樣的事情?
注意:我正在使用Angular 1.x,所以我需要類似的東西。
我認為您不是真正在編寫.then().then()
,因為您可以將其折疊為一個.then
,但是您真正關心的是返回承諾並讓一些外部代碼在then
添加另一個鏈。 在這種情況下,請執行以下操作:
let p = somethingThatReturnsAPromise();
p.then(() => doSomething());
return p;
這使調用者可以將附加的then
附加到原始諾言,而不是鏈接到.then
,從而獲得原始諾言的價值。 這稱為分支承諾鏈。
也許這違背了諾言的想法
輕微地,promise鏈是管道, then
處理程序在每個階段對事物進行轉換。 但是,想要不加更改地傳遞值是完全有效的。
一種想法是組成一個函數:
確實,我想到的第一件事是我該怎么做。
但我喜歡的東西,而不是
then
有這樣的事情?
沒有。 您可以將其添加到Promise.prototype
以添加到自己的項目中(我不會在庫中)。 或者,您可以給自己一個Promise
子類並將其添加到那里。
使用Promise子平台,您可以執行以下操作:
return MyPromise.resolve(somethingThatReturnsAPromise())
.thenSide(soSomethingg); // Eg; update the UI
... thenSide
是您的方法,該方法then
將原始值不變地傳遞回,例如:
class MyPromise extends Promise {
thenSide(callback) {
this.then(callback);
return this;
}
}
要么
class MyPromise extends Promise {
thenSide(callback) {
this.then(callback);
return MyPromise.resolve(this);
}
}
...取決於您是否對thenSide
感到煩惱, thenSide
返回相同的諾言(因為then
始終會返回新的諾言)。
據我所知(很可能是錯誤的),“通過”副作用的包裝方法是一種慣用的方式來完成您想要的事情。
或者(如果您在多個地方需要相同的response
),可以在遇到這種情況時斷開承諾鏈。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.