Здесь я попытался немного очистить код, чтобы его было легче читать. Как уже говорили другие, вам нужно определить обещание. В частности, вам нужно написать функцию, которая ВОЗВРАЩАЕТ promise
. Если функция возвращает promise
, вы можете использовать .then
.
Помните, что вам также необходимо определить, к чему promise
разрешается в случае успешного и в случае ошибки, или в случае отклонения.
MDN Обещания: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
У меня не так много контекста, поэтому мне немного неясно, что вы будете resolve
и что вы будете reject
в своей функции checkFile
, но я постараюсь ниже дать предложение о том, как вы можете заставить его работать.
if (condition) {
try {
if (fs.existsSync(path)) {
playaudio();
} else {
checkfile().then(function(){
playaudio();
});
}
} catch (err) {
console.log(err);
}
}
function checkfile () {
try {
if (!fs.existsSync(path)) {
var file = fs.createWriteStream("ring.wav");
var request = http.get("http://mp3.com/ring.wav", function(response){
response.pipe(file);
});
}
} catch(err) {
console.error(err)
}
}
function playaudio() {
player.play('ring.wav', function(err){
if (err) throw err
})
}
Общий пример функции, которая возвращает обещание и его использование:
const somePromiseReturningFunction = function(someParameter) {
return new Promise(function(resolve, reject) {
if (someParameter === 'someDesiredString') {
resolve('Success!');
} else {
reject('Error!');
}
});
};
somePromiseReturningFunction('someDesiredString')
.then(function(resolvedValue) {
console.log(resolvedValue) // prints 'Success!'
})
.catch(function(error) {
console.log(error) // prints 'Error!'
});
checkFile переписан, чтобы вернуть обещание:
function checkfile () {
return new Promise(function(resolve, reject) {
try {
if (!fs.existsSync(path)) {
var file = fs.createWriteStream("ring.wav");
var request = http.get("http://mp3.com/ring.wav", function(response){
response.pipe(file);
resolve();
});
}
} catch(err) {
reject(err)
}
});
}