Javascript 在我的示例中,如何从Promise返回变量

Javascript 在我的示例中,如何从Promise返回变量,javascript,reactjs,promise,Javascript,Reactjs,Promise,我对下一个代码有问题: const Header = () => { let min = 0; let sec = 0; timeRemaining().then(res => { getCountdown(); const interval = setInterval(function() { getCountdown(); }, 1000); function getCountdown() { var curren

我对下一个代码有问题:

const Header = () => {

 let min = 0;
 let sec = 0;

 timeRemaining().then(res => {
    getCountdown();
    const interval = setInterval(function() {
      getCountdown();
    }, 1000);
    function getCountdown() {
      var current_date = new Date().getTime();
      var seconds_left = (res.data - current_date) / 1000;
      let minutes = parseInt(seconds_left / 60);
      let seconds = parseInt(seconds_left % 60);
      if (minutes === 0 && seconds === 0) {
        clearInterval(interval);
      }
      return {min = minutes sec = seconds}; // The poblem is here

    }
  });
  return (
    <div>
      <p>{seconds}</p>
      <p>{minutes}</p>
    </div>
  );
};
const头=()=>{
设min=0;
设sec=0;
剩余时间()。然后(res=>{
getCountdown();
const interval=setInterval(函数(){
getCountdown();
}, 1000);
函数getCountdown(){
var current_date=new date().getTime();
var seconds_left=(res.data-当前日期)/1000;
分钟=parseInt(剩余秒/60);
let seconds=parseInt(剩余%60秒);
如果(分钟===0和秒===0){
间隔时间;
}
return{min=minutes-sec=seconds};//问题在这里
}
});
返回(
{秒}

{分钟}

); };

我想在我的问题中设置值min和sec,但不能。谢谢你的回答

好的,让我们看看您的代码,了解一些事情。

这里需要注意的第一件事是,您的组件
是一个功能组件

函数组件没有状态,它们被称为哑组件,因为它们只获取道具作为输入,并呈现一些东西作为输出。这是什么意思?这意味着在组件中使用承诺不会产生任何效果,因为您的承诺将在组件已经呈现之后得到解决

你能为解决这个问题做些什么?您可以使用,甚至更好,您可以使用来处理函数组件内部的状态。但请记住,在这两种情况下,您都应该为数据保留一个状态


需要注意的第二件事是,您的代码有一些错误:

在第一个
return
语句中,您将变量
min
设置为从
minutes
接收值,然后返回它。(第二个return语句无论如何都不会到达,因为第一个return将完成函数)

但是您的
min
变量被声明为
const
,因此您不能在声明后将值赋予它

此外,您还试图在声明它们的函数之外访问
minutes
seconds
。这是不可能的


结论:

您的代码的想法是正确的,但它的实现方式是错误的。试试我发给你的链接,你可能会在几分钟内以正确的方式解决这个问题


:)

它们都是
const
,因此您无法设置它们。此外,您不能有两个
return
语句-第一个语句将执行,函数结束-第二个语句将永远无法访问。异步调用
.then()
中的回调,因此外部
return
将已被调用。你需要使用<代码> UsestAuter()/代码>钩子来初始化<代码> min <代码>和<代码> SEC/<代码>,并异步设置,触发重新渲染。问题1:在一个承诺中解决的值只能在<代码>中。然后(或者Asicc/Acess,但不要考虑,这只是承诺的语法糖)…问题2:getCountdown函数位于setInterval回调中,因此任何返回值都不可用。。。。问题3:代码意味着您希望
Header
在单个调用中每秒返回一个值,这是不可能的。您是否考虑过使用回调?您是否使用有状态的react组件作为类或函数+挂钩?您需要在类的生命周期事件或挂钩中初始化此进程。编辑说明:
Functional
Function