вернуть обещание из функции в узле JS

Найден здесь 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
  }
}

0
задан node_man 18 January 2019 в 05:49
поделиться

2 ответа

Сначала нужно определить 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()....
0
ответ дан mrid 18 January 2019 в 05:49
поделиться

Здесь я попытался немного очистить код, чтобы его было легче читать. Как уже говорили другие, вам нужно определить обещание. В частности, вам нужно написать функцию, которая ВОЗВРАЩАЕТ 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)
        }
    });
}
0
ответ дан Kevin Arthur 18 January 2019 в 05:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: