我不确定我的标题是否适合我的问题,但现在就可以了。
我有一个迭代器每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
答案 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的值更改为所需的类型。如果您想要返回多个值,只需使用包含所有所需值的数组的上述两个选项。