You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Electron/NodeJS环境下从Keras.js的Promise中提取预测值

Fixing Keras.js Promise Value Access in Electron/NodeJS (No async/await)

Hey there, I totally get the frustration when you can see the prediction log in the console but can't grab that value to use elsewhere—Promise asynchronous behavior can feel tricky when you're new to JS. Let's walk through why this happens and how to fix it without relying on async/await.

Why You're Getting undefined

First, let's clarify the root issue. When you run code like this:

let predictionResult;
model.predict(yourInputData).then(output => {
  console.log(output); // Works fine here
  predictionResult = output;
});
console.log(predictionResult); // Logs undefined

The console.log(predictionResult) runs before the .then() callback. Promises are asynchronous—they don't block the rest of your code from executing. By the time the Promise resolves and sets predictionResult, that final log has already run.

Solution 1: Chain .then() to Run Dependent Logic

The simplest fix is to move all code that needs the prediction value inside the .then() chain, or call your processing function directly from there:

// Run prediction, then handle the result immediately
model.predict(yourInputData)
  .then(prediction => {
    // Call your other function with the prediction here
    usePredictionForSomething(prediction);
  })
  .catch(error => {
    // Always handle errors to avoid uncaught Promise exceptions!
    console.error("Prediction failed:", error);
  });

// Define your function that uses the prediction
function usePredictionForSomething(prediction) {
  // Do whatever you need here—update the UI, save data, etc.
  console.log("Using prediction:", prediction);
}

This ensures your dependent code only runs after the Promise has resolved and the prediction value is available.

Solution 2: Wrap It in a Callback-Based Function

If you prefer working with NodeJS-style callbacks (common in older Electron/Node setups), you can wrap the Keras.js prediction in a function that takes a callback:

function getKerasPrediction(inputData, callback) {
  model.predict(inputData)
    .then(prediction => {
      // Pass null for error, then the prediction result
      callback(null, prediction);
    })
    .catch(error => {
      // Pass the error first, null for result
      callback(error, null);
    });
}

// Use the function like this
getKerasPrediction(yourInputData, (error, prediction) => {
  if (error) {
    console.error("Oops, something went wrong:", error);
    return;
  }
  // Now you can use the prediction safely
  usePredictionForSomething(prediction);
});

This mirrors the callback pattern you might see in other NodeJS APIs, which can feel familiar if you're used to that style.

Quick Note on async/await

Wait, just to clarify—most modern Electron and NodeJS versions do support async/await. If you're stuck on an older version, the above solutions are perfect. But if you can use it later, here's a quick example for reference (though you said you can't right now):

async function runPrediction() {
  try {
    const prediction = await model.predict(yourInputData);
    usePredictionForSomething(prediction);
  } catch (error) {
    console.error("Prediction failed:", error);
  }
}
runPrediction();

The key takeaway is: don't try to "force" the Promise to resolve synchronously. All code that depends on the prediction value needs to wait for the Promise to finish, which means putting it inside .then() or a callback.

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:27:15