如果值不存在,我正在尝试做某事,所以我可以更新它。但是isExist函数总是返回undefined。我该怎么办?
参考:Ero
已经定义。
async.forEachOf(idArray, function(value, key, cb) {
rp(baseURL + value)
.then(function(json) {
if (!isExist(json)) {
// do something
} else {
console.log(isExist(json), "It's not video or exists");
}
})
.catch(function(err) {
console.error(err);
})
cb();
}, function() {
res.status(200)
});
});
function isExist(data) {
let parsedData = JSON.parse(data);
if (parsedData.items[0].type === 'Video') {
Ero.find({
videoUri: parsedData.items[0].url_mp4
}, function(err, docs) {
if (docs.length) {
return true;
} else {
return false;
}
})
} else {
return false;
}
}
答案 0 :(得分:0)
如果JSON有语法错误,使用JSON.parse会使您遇到异常风险。使用try / catch块。
在不知道您的数据的情况下,我不能说您的支票上还有什么问题。
function isExists(data){
try{
var parsedData = JSON.parse(data);
if (parsedData.items[0].type === 'Video') {
Ero.find({
videoUri: parsedData.items[0].url_mp4
}, function(err, docs) {
if (docs.length) {
return true;
} else {
return false;
}
})
} else {
return false;
}
}catch(e) {
// any error
return false;
}
}
答案 1 :(得分:0)
让我们看一下你的isExist
函数。
function isExist(data) {
let parsedData = JSON.parse(data);
if (parsedData.items[0].type === 'Video') {
Ero.find({
videoUri: parsedData.items[0].url_mp4
}, function(err, docs) {
if (docs.length) {
return true;
} else {
return false;
}
})
} else {
return false;
}
}
在该函数中,条件有两个分支。当条件为false
时,else
块将运行 - 这将返回false
。当条件为true
时,第一个块将运行但没有return语句,因此隐式返回undefined
。
你说“为什么它没有退货声明?”,我很确定我有一个。
看起来像你有一个。
if (docs.length) {
return true;
} else {
return false;
}
然而,看看它返回的功能。它只返回传递给Ero.find
的回调函数,它不会返回isExist
。
你问“我该怎么办?”。
我假设Ero.find
是一个异步函数,因此isExist
也将成为异步函数。要在JavaScript中执行异步功能,您可以使用Promises或async functions。
以下是使用Promise可能看起来像isExist
的示例代码。
function isExist(data) {
/**
* `isExist` returns a Promise. This means the function _promises_ to have a value resolved in the future.
*/
return new Promise((resolve, reject) => {
let parsedData = JSON.parse(data);
if (parsedData.items[0].type === 'Video') {
Ero.find({
videoUri: parsedData.items[0].url_mp4
}, function(err, docs) {
if (docs.length) {
/**
* Once `Ero.find` has completed, `resolve` `isExist` with a value of `true`, otherwise `resolve` `isExist` with a value of `false`.
*/
resolve(true);
} else {
resolve(false);
}
})
} else {
/**
* You can resolve a Promise even without performing an asynchronous operation.
*/
resolve(false);
}
});
}
进一步阅读