Найден здесь http://kickjava.com/1139.htm#ixzz1mv2nEWg7 :
"Сложность с getDeclaringClass заключается в том, что анонимные внутренние классы не считаются членами класс в Спецификации языка Java, тогда как именованные внутренние классы. Поэтому этот метод возвращает null для анонимного класса. Альтернативный метод getEnclosingClass работает как для анонимных, так и именованных классов. "
Например:
public class Test {
public static void main(String[] args) {
new Object() {
public void test() {
System.out.println(this.getClass().getDeclaringClass()); //null
System.out.println(this.getClass().getEnclosingClass()); //not null
}
}.test();
}
}
То же самое относится к неанонимным классам в области метода:
class Foo {
Class> bar() throws NoSuchFieldException {
class Bar { }
return Bar.class;
}
static void main(String[] args) throws NoSuchFieldException {
System.out.println(new Foo().bar().getDeclaringClass()); // null
System.out.println(new Foo().bar().getEnclosinglass()); // Foo
}
}
Сначала нужно определить promise
.
let checkfile = 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("downloaded");
});
}
} catch(err) {
console.error(err)
}
});
Теперь вы можете использовать
checkfile.then()....
Здесь я попытался немного очистить код, чтобы его было легче читать. Как уже говорили другие, вам нужно определить обещание. В частности, вам нужно написать функцию, которая ВОЗВРАЩАЕТ a 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)
}
});
}