如何运行 IF/else 语句完成后的回调
How to run the call back after the IF/else statement is completed
我有 if
和 else
语句以及一个更新函数,该函数将根据 if
语句的完成工作。我想 运行 回调以确保它仅在任何分支完成时 运行。
if (source !== "itunes"){
getCustomCover(title);
}
else {
getiTuensCover(iTunes_data);
}
updateCover(currentCoverURL);
所以我想确保 updateCover(currentCoverURL);
在 getCustomCover(title);
完成时是 运行ning。 else
分支也是如此。像 $.when()
& then()
.
这样的东西
提前致谢。
function getCustomCover(currentTitle){
$.each(cover_data, function( key, value ) {
if (value.title === currentTitle){
currentCoverURL = value.image;
} else {
currentCoverURL = settings.default_image;
}
});
}
如果这段代码:
if (source !== "itunes"){
getCustomCover(title);
}
else {
getiTuensCover(iTunes_data);
}
在 for each 中,如果要同时传递所有结果,则可能需要一个 promise。但是,如果您可以在不影响您的应用程序的情况下异步使用 cover,那么您可能需要一个回调模式。例如,将您的函数修改为如下内容:
var getCustomCover = function (title, callback) {
var jsonFile = './jsonfile.json';
fs.readFile(filePath, (err, data) => {
if (err) {
callback(err);
} else {
var json = JSON.parse(data.toString());
var cover = json['title'].cover;
callback(null, cover);
}
});
};
根据您的需要进行更改。然后调用你的函数:
if (source !== "itunes"){
getCustomCover(title, (err, coverUrl) => {
if (err) {
console.log(err);
} else {
updateCover(coverUrl);
}
});
}
else {
// DO THE SAME IF NECCESSARY HERE
getiTuensCover(iTunes_data);
}
这是 NodeJS 中的标准错误优先回调模式。
编辑 --------------
适配你刚刚添加的代码:
function getCustomCover(currentTitle, callback){
$.each(cover_data, function( key, value ) {
if (value.title === currentTitle){
currentCoverURL = value.image;
} else {
currentCoverURL = settings.default_image;
}
callback(currentCoverURL);
});
}
这样,回调函数将使用 currentCoverURL
个参数调用,次数与循环中的覆盖次数一样多。
编辑 2 --------------
如果您希望在循环中只找到一个 coverURL,那么您可以考虑重构您的代码,如下所示:
function getCustomCover(currentTitle, callback){
currentCoverURL = settings.default_image;
$.each(cover_data, function( key, value ) {
if (value.title === currentTitle){
currentCoverURL = value.image;
}
});
callback(currentCoverURL);
}
我有 if
和 else
语句以及一个更新函数,该函数将根据 if
语句的完成工作。我想 运行 回调以确保它仅在任何分支完成时 运行。
if (source !== "itunes"){
getCustomCover(title);
}
else {
getiTuensCover(iTunes_data);
}
updateCover(currentCoverURL);
所以我想确保 updateCover(currentCoverURL);
在 getCustomCover(title);
完成时是 运行ning。 else
分支也是如此。像 $.when()
& then()
.
提前致谢。
function getCustomCover(currentTitle){
$.each(cover_data, function( key, value ) {
if (value.title === currentTitle){
currentCoverURL = value.image;
} else {
currentCoverURL = settings.default_image;
}
});
}
如果这段代码:
if (source !== "itunes"){
getCustomCover(title);
}
else {
getiTuensCover(iTunes_data);
}
在 for each 中,如果要同时传递所有结果,则可能需要一个 promise。但是,如果您可以在不影响您的应用程序的情况下异步使用 cover,那么您可能需要一个回调模式。例如,将您的函数修改为如下内容:
var getCustomCover = function (title, callback) {
var jsonFile = './jsonfile.json';
fs.readFile(filePath, (err, data) => {
if (err) {
callback(err);
} else {
var json = JSON.parse(data.toString());
var cover = json['title'].cover;
callback(null, cover);
}
});
};
根据您的需要进行更改。然后调用你的函数:
if (source !== "itunes"){
getCustomCover(title, (err, coverUrl) => {
if (err) {
console.log(err);
} else {
updateCover(coverUrl);
}
});
}
else {
// DO THE SAME IF NECCESSARY HERE
getiTuensCover(iTunes_data);
}
这是 NodeJS 中的标准错误优先回调模式。
编辑 --------------
适配你刚刚添加的代码:
function getCustomCover(currentTitle, callback){
$.each(cover_data, function( key, value ) {
if (value.title === currentTitle){
currentCoverURL = value.image;
} else {
currentCoverURL = settings.default_image;
}
callback(currentCoverURL);
});
}
这样,回调函数将使用 currentCoverURL
个参数调用,次数与循环中的覆盖次数一样多。
编辑 2 --------------
如果您希望在循环中只找到一个 coverURL,那么您可以考虑重构您的代码,如下所示:
function getCustomCover(currentTitle, callback){
currentCoverURL = settings.default_image;
$.each(cover_data, function( key, value ) {
if (value.title === currentTitle){
currentCoverURL = value.image;
}
});
callback(currentCoverURL);
}