@@ -2013,6 +2013,8 @@ function resetSuspendedWorkLoopOnUnwind(fiber: Fiber) {
20132013  resetChildReconcilerOnUnwind ( ) ; 
20142014} 
20152015
2016+ let  didWarnForThrowAPromise  =  false ; 
2017+ 
20162018function  handleThrow ( root : FiberRoot ,  thrownValue : any ) : void  { 
20172019  // A component threw an exception. Usually this is because it suspended, but 
20182020  // it also includes regular program errors. 
@@ -2066,19 +2068,34 @@ function handleThrow(root: FiberRoot, thrownValue: any): void {
20662068    // case where we think this should happen. 
20672069    workInProgressSuspendedReason  =  SuspendedOnHydration ; 
20682070  }  else  { 
2069-     // This is a regular error. 
20702071    const  isWakeable  = 
20712072      thrownValue  !==  null  && 
20722073      typeof  thrownValue  ===  'object'  && 
20732074      typeof  thrownValue . then  ===  'function' ; 
2074- 
2075-     workInProgressSuspendedReason  =  isWakeable 
2076-       ? // A wakeable object was thrown by a legacy Suspense implementation. 
2077-         // This has slightly different behavior than suspending with `use`. 
2078-         SuspendedOnDeprecatedThrowPromise 
2079-       : // This is a regular error. If something earlier in the component already 
2080-         // suspended, we must clear the thenable state to unblock the work loop. 
2081-         SuspendedOnError ; 
2075+     if  ( isWakeable )  { 
2076+       // A wakeable object was thrown by a legacy Suspense implementation. 
2077+       // This has slightly different behavior than suspending with `use`. 
2078+       workInProgressSuspendedReason  =  SuspendedOnDeprecatedThrowPromise ; 
2079+       if  ( __DEV__ )  { 
2080+         if  ( ! didWarnForThrowAPromise  &&  workInProgress  !==  null )  { 
2081+           didWarnForThrowAPromise  =  true ; 
2082+           const  componentName  = 
2083+             getComponentNameFromFiber ( workInProgress )  ||  'unknown' ; 
2084+           runWithFiberInDEV ( workInProgress ,  ( )  =>  { 
2085+             console . warn ( 
2086+               'Throwing a Promise to cause it to suspend is deprecated in React.\n'  + 
2087+                 'Please update your library to call use(promise) instead.\n'  + 
2088+                 'See https://react.dev/reference/react/use\n\n  in %s' , 
2089+               componentName , 
2090+             ) ; 
2091+           } ) ; 
2092+         } 
2093+       } 
2094+     }  else  { 
2095+       // This is a regular error. If something earlier in the component already 
2096+       // suspended, we must clear the thenable state to unblock the work loop. 
2097+       workInProgressSuspendedReason  =  SuspendedOnError ; 
2098+     } 
20822099  } 
20832100
20842101  workInProgressThrownValue  =  thrownValue ; 
0 commit comments