Javascript 回调中的变量有时为空

Javascript 回调中的变量有时为空,javascript,callback,Javascript,Callback,我有一个函数,它在回调中返回一个随机颜色,如下所示: function getRandomColor(callback) { var colors = [ 'greyblue', 'lightblue', 'blue', 'lightgreen', 'darkgreen', 'purple', 'pink', 'red', 'yellow',

我有一个函数,它在回调中返回一个随机颜色,如下所示:

function getRandomColor(callback) {

    var colors = [
        'greyblue',
        'lightblue',
        'blue',
        'lightgreen',
        'darkgreen',
        'purple',
        'pink',
        'red',
        'yellow',
        'brown'
    ];

    var random = Math.floor(Math.random() * colors.length+1);
    var color = colors[random];

    return callback(color);
}
此函数在需要回调值的其他函数中调用。但是回调中的
color
有时是空的。有人能解释为什么会这样吗?实际上,我使用回调来防止空值,但它看起来不是防水解决方案

function createCategory(name, access_token, callback){
    getRandomColor(function(color){
        countr.callApi(
            {
                url: 'categories', 
                method: 'POST'
            }, {
                name: name, 
                visible: true, 
                color: color 
            }, 
            access_token, 
            function(err, category){
                return callback(err, category);
            }
        )
    })
}

由于正在使用的API需要类别上的颜色(我们想要创建),此调用将失败,因为
颜色未定义。我想知道为什么,以及如何解决

原因是随机数:

var random = Math.floor(Math.random() * colors.length+1);
它将在
0
颜色之间生成随机数。长度+1
其中
颜色。长度
10
,因此它将在
0-10
之间生成随机数,如果随机数为
10
颜色[随机]
将为您提供
未定义的
,因为
颜色
数组的索引10中没有元素。因此,

var color = colors[random]; //undefined
return callback(color);  //callback has value undefined
要修复此问题,请将代码更改为

var random = Math.floor(Math.random() * colors.length);
它将仅在
0-9
之间生成随机数。

@NVO;-)发生了