来自回调的变量有时为空



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

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.我想知道为什么,以及如何解决。

原因是随机数:

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

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

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

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

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

这将仅在0-9之间生成随机数。

最新更新