このMeteorクライアント・コードは、app/publicディレクトリーに存在するファイルが存在するかどうかを検査するときにtrueを返しません。Meteorパブリック・ディレクトリーにファイルが存在していないか確認してください。
以下のようなブラウザのコンソールで使用する場合、なぜ、今それを修正するために、それはundefined
utility.isFileExist('http://localhost:3000/abc.gif')
または
utility.isFileExist('http://localhost:3000/public/abc.gif')
を返しますか?コメント あたりとして感謝
//client/lib.js
utility = (function() {
return {
isFileExist: (url) => {
$.get(url)
.done(function() {
return true;
}).fail(function() {
return false;
})
}
}
})();
編集まず、のは間違っているかを把握しましょう
Template.checks.helpers({
'values': function() {
let result = [];
let checks = Session.get('items');
checks.forEach((item) => {
let url = item.replace(/[^0-9a-zA-Z]/g, '');
$.get(url + '.giiif') //<----- files do not exist
.done(function() {
console.log(`exists`); //<----- yet this prints out
}).fail(function() {
console.log(`does not exist`); //<--- expected this instead
});
result.push({
label: item,
image: url
});
});
return result;
}
});
構文上の砂糖と(不要な)IIFEで囲んでも、XHRが非同期でエスケープすることはできません。答えを処理するには、コールバックが必要です(または、async/awaitを使用してES5にコンパイルします)。 – MasterAM
@MasterAM例を挙げてください。 Thx –
jQuery(MeteorにもHTTPパッケージがあります)を使いたい場合は、コードで、 'done | fail'(または' always'代わりに)コールバックでロジックの流れを続ける必要があります。結果をすぐに(または同期構文で)ES5で取得することはできません。 – MasterAM