回调中的变量有时为空

时间:2018-07-02 09:24:35

标签: javascript callback

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

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要求类别(我们要创建)的颜色,因此此调用将失败,因为color is undefined。我想知道为什么,以及如何解决。

1 个答案:

答案 0 :(得分:2)

原因是随机数:

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

它将生成0colors.length+1之间的随机数,其中colors.length10,因此它将生成0-10之间的随机数,如果随机数是10然后colors[random];会给您undefined,因为colors数组的索引10中没有元素。因此,

var color = colors[random]; //undefined
return callback(color);  //callback has value undefined

要解决此问题,请将您的代码更改为

var random = Math.floor(Math.random() * colors.length);

只会在0-9之间生成随机数。