我有一个函数可以在回调中返回随机颜色,如下所示:
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
。我想知道为什么,以及如何解决。
答案 0 :(得分:2)
原因是随机数:
var random = Math.floor(Math.random() * colors.length+1);
它将生成0
到colors.length+1
之间的随机数,其中colors.length
是10
,因此它将生成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
之间生成随机数。