在JavaScript中等待函数完成

Waiting for functions to complete in JavaScript

本文关键字:函数 等待 JavaScript      更新时间:2023-09-26

为什么下面的代码每次都生成不同的输出(不是因为随机函数),但它对某些值给出了未定义,有时是其他一些值。有什么问题吗?

function getRandom(ubound) {
  return Math.floor((Math.random()*10) % ubound); 
}
function getInterval() {
  var interval = [getRandom(10), getRandom(10)];
  if(interval[1] >= interval[0])
    return interval;
  else
    getInterval();
}
function generateIntervals() {
  for(var i = 0; i < n; i++)
    intervals[i] = getInterval();
}
function printIntervals() {
  for(var i = 0; i < n; i++)
    console.log("Node " + (i + 1) + ": " + intervals[i]);
}
generateIntervals();
printIntervals();

得到如下输出:

Node 1: 0,9
Node 2: 0,3
Node 3: undefined
Node 4: 2,2

Node 1: 3,3
Node 2: 3,3
Node 3: 1,8
Node 4: undefined

递归函数中缺少return:

if(interval[1] >= interval[0])
    return interval;
else
    return getInterval();
//  ^^^^^^

虽然我个人只是交换两个值,而不是使用递归。=]

if(interval[1] >= interval[0])
    return interval;
else
    return [interval[1], interval[0]];

或者更简单的/语义使用Array.reverse():

if(interval[1] < interval[0])
    interval.reverse();
return interval;

小提琴