簡體   English   中英

Javascript,節點,承諾和遞歸

[英]Javascript, Node, Promises, and recursion

我無法控制執行流程。 這是node.js,bluebird,對執行路徑的不良控制以及node.js表搜索因使用promises而失敗的后續措施。 從console.log打印輸出來看,我的遞歸例程工作得很好,除了對resolve()的第一個調用(第n個遞歸調用的信號)使后續代碼的綠燈亮了,該代碼不應獲得綠燈直到對遞歸例程的第一次調用都調用resolve()。 事實證明,對遞歸例程的第一次調用提供了我想要報告的答案,但是到報告它時,后續代碼不再偵聽它,並且與“未定義”答案一起運行。 壞。

我的代碼在這里很長要分享。 我試圖編寫一個小問題模型,但沒有發現多種因素的組合來復制行為。

聽起來有點熟? 您如何對Promises准時發布后續代碼保持適當的控制?

我以為可能是對例程的第一次調用可以啟動一個傳遞到Promise中的數組。所有后來的調用都會向該數組添加另一個條目。 我還沒試過 瘋?

如果沒有看到您的實際代碼,我們將無法具體回答。

聽起來有點熟? 您如何對Promises准時發布后續代碼保持適當的控制?

答案總是要在准備好要執行的事物之前就不解決鏈中的第一個promise,並構造您的promise鏈,以使從屬的事物直到正確解決了他們正在等待的事物才得以執行。 如果某件事執行得太早,那么您要么調用得太早,要么您的諾言結構不正確。 如果沒有看到您的實際代碼,我們將無法確定。

一個常見的錯誤是:

someAsyncOperation().then(someOtherAync()).then(...)

應該是:

someAsyncOperation().then(someOtherAync).then(...)

您應該在其中傳遞對下一個異步函數的引用,而不是立即調用它並傳遞其返回值。

我以為可能是對例程的第一次調用可以啟動一個傳遞到Promise中的數組。所有后來的調用都會向該數組添加另一個條目。 我還沒試過 瘋?

您不能將數組傳遞給Promise.all() ,然后再將其添加到該數組中-這不是Promise.all()支持的功能。 您可以將后續內容鏈接到Promise.all()的結果上,也可以執行另一個Promise.all() ,其中包括上一個Promise.all()承諾和更多承諾。

var someArrayOfPromises = [...];
var pAll = Promise.all(someArrayOfPromises);

var someMorePromises = [...]
someMorePromises.push(pAll);
Promise.all(someMorePromoises).then(...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM