Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何正确地从函数内的数据返回值_Javascript_Reactjs_Function_Return - Fatal编程技术网

Javascript 如何正确地从函数内的数据返回值

Javascript 如何正确地从函数内的数据返回值,javascript,reactjs,function,return,Javascript,Reactjs,Function,Return,我是javascript新手,并开始从中学习惊人的东西。如下面的代码所示,我如何能够在getData()内返回index的值。然后(data=>{getData函数具有json响应值 subPatternStart() { getData().then(data => { var patternStart = 1525750500000; var index = 0; for (var i = 0; i < data.length; i++) {

我是javascript新手,并开始从中学习惊人的东西。如下面的代码所示,我如何能够在
getData()内返回
index
的值。然后(data=>{
getData
函数具有json响应值

subPatternStart() {
  getData().then(data => {
    var patternStart = 1525750500000;
    var index = 0;

    for (var i = 0; i < data.length; i++) {
      if ( patternStart >= data[i].time && patternStart < data[i+1].time ) {
        //...somecode
      }
    }
    console.log("Index:" , index);
  })
}
在这段简单的代码中,它在render方法中返回精确的值,我想这样做

subPatternStart() {
  var patternStart = 1;
  return patternStart;
}

您应该使用从
getData
获得的值设置组件的状态。然后React可以自行更新组件并呈现页面。例如

import React from 'react';

class App extends React.Component {

  constructor(props) {
    super(props);

    this.state = {
      index: 0
    }
  }

  subPatternStart() {
    getData().then(data => {
      var patternStart = 1525750500000;
      var index = 0;

      for (var i = 0; i < data.length; i++) {
        if (patternStart >= data[i].time && patternStart < data[i + 1].time) {
          //...somecode
        }
      }
      this.setState({
        index: index
      });
    })
  }
  render() {
    index =  this.state.index
  }
}
从“React”导入React;
类应用程序扩展了React.Component{
建造师(道具){
超级(道具);
此.state={
索引:0
}
}
子模式开始(){
getData()。然后(数据=>{
var patternStart=1525750500000;
var指数=0;
对于(变量i=0;i=data[i]。时间和&patternStart
函数
子模式start
调用异步函数
getData
,因此您需要使用
回调
承诺
来获取数据

1.使用回调
子模式启动(callbackFunction){
getData()。然后(数据=>{
var patternStart=1525750500000;
var指数=0;
对于(变量i=0;i=data[i]。时间和&patternStart{index=i})
}
2.使用承诺
子模式启动(callbackFunction){
var承诺=新承诺(解决=>{
getData()。然后(数据=>{
var patternStart=1525750500000;
var指数=0;
对于(变量i=0;i=data[i]。时间和&patternStart
感谢您的回复。当我记录此.setState({index:index})时,它未定义。我在
this.state.index中得到一个空结果,我接受这个答案,因为这是我使用的答案。作为新手,与其他解决方案相比,这很容易实现。我可能需要学习更多来实现另一个答案。感谢Ron!修改了呈现值。编辑的一个是我使用的有效的解决方案。t非常感谢您的回复,我确实为您编写了代码,它给了我
TypeError:callbackFunction不是一个函数
async
是否有特殊的依赖关系?当我得到
未捕获的引用时,错误:对于async/await-on-react的实现,没有定义再生时间
,您可以阅读此用法
 转换运行时
plugin以删除
registratorrumtime
error如何记录函数结果?这似乎不正确
console.log(this.subPatternStart((I)=>{index=I}))
import React from 'react';

class App extends React.Component {

  constructor(props) {
    super(props);

    this.state = {
      index: 0
    }
  }

  subPatternStart() {
    getData().then(data => {
      var patternStart = 1525750500000;
      var index = 0;

      for (var i = 0; i < data.length; i++) {
        if (patternStart >= data[i].time && patternStart < data[i + 1].time) {
          //...somecode
        }
      }
      this.setState({
        index: index
      });
    })
  }
  render() {
    index =  this.state.index
  }
}
subPatternStart(callbackFunction) {
        getData().then(data => {
            var patternStart = 1525750500000;
            var index = 0;

            for (var i = 0; i < data.length; i++) {
                if (patternStart >= data[i].time && patternStart < data[i + 1].time) {
                    //...somecode
                }
            }
            console.log("Index:", index);
            callbackFunction(index);
        })
    }

// calling the function
render() {
    var index;
    this.subPatternStart((i) => { index = i })
}
subPatternStart(callbackFunction) {
    var promise = new Promise(resolve => {
        getData().then(data => {
            var patternStart = 1525750500000;
            var index = 0;

            for (var i = 0; i < data.length; i++) {
                if (patternStart >= data[i].time && patternStart < data[i + 1].time) {
                    //...somecode
                }
            }
            console.log("Index:", index);
            resolve(index);
        })
    })
    return promise;
}


// calling the function
async render() {
    index = await this.subPatternStart();
}