在迭代器中返回函数值而不退出javascript

时间:2017-03-22 02:23:43

标签: javascript function iteration

我不确定我的标题是否适合我的问题,但现在就可以了。

我有一个迭代器每1秒运行一个函数,如下所示:

function getValue(val) {
  return val;
}

function test() {
  let x = 20;
  getValue(x)

  setTimeout(()=>{
    test()
  }, 1000)
}

export default test;

当函数getValue()被命中时,迭代器会停止,因为该函数内部有一个返回值。如何在不退出停止迭代的情况下返回值?有办法吗?非常感谢。

index.js(reactjs)

import test from './test.js';

componentDidMount() {
  test()
}

test.js

function getValue(val) {
  return val;
}

function test() {
  let x = 20;
  getValue(x)

  setTimeout(()=>{
    test()
  }, 1000)
}

export default test;

我的目标是将值20传递给我的index.js

3 个答案:

答案 0 :(得分:1)

  

我的目标是将值20传递给我的index.js

为此,您不需要getValue功能。只需写下

// test.js
export default function test() {
  let x = 20;
  setTimeout(test, 1000)
  return x; // <===
}

// index.js
import test from './test.js';
console.log("test() returned", test());

请注意,在超时中,您现在将获得该返回值,并且如果您愿意,可以使用它

// test.js
export default function test() {
  let x = 20;
  setTimeout(() => {
    let res = test();
    console.log("test() in timeout returned", res);
  }, 1000)
  return x;
}
  

这样的任何其他选项,比如它可以每1秒向客户端传递一次值吗?

为此,您希望使用作为参数传递给test的回调,并且可以调用以在任何时候传递x的值 - 并且根据需要随时传递:

// test.js
export default function test(callback) {
//                           ^^^^^^^^
  let x = 20;
  callback(x); // <===
  setTimeout(() => {
    test(callback);
  }, 1000);
}

// index.js
import test from './test.js';
function gotValue(val) {
  console.log("received ", val);
}
test(gotValue);
//   ^^^^^^^^

答案 1 :(得分:1)

如果你想从每个时间间隔的测试中接收一个值,那么你需要传递一个每次都要执行的回调函数。根本不可能多次从函数返回一个值(没有生成器函数,但现在不值得担心)。

const test = (callback) => {
    let x = 20;
    return setInterval(() => callback(x), 1000);
}

// then from elsewhere
// the lambda function will be called with x as 20
// every time the interval fires
const unsub = test((x) => {
   // do something with x
   // unsubscribe when you are ready and the interval will be cleared
   if (condition) {
       clearInterval(unsub);
   }
});

答案 2 :(得分:0)

我不完全理解你的问题。

你似乎没有在你的函数中迭代(循环)。

我的建议是要么在函数的最后返回,要么让函数没有return语句,而是将var的值更改为所需的类型。如果您想要返回多个值,只需使用包含所有所需值的数组的上述两个选项。