ECMAScript 6 имеет «генераторы», которые позволяют вам легко программировать в асинхронном стиле.
function* myGenerator() {
const callback = yield;
let [response] = yield $.ajax("https://stackoverflow.com", {complete: callback});
console.log("response is:", response);
// examples of other things you can do
yield setTimeout(callback, 1000);
console.log("it delayed for 1000ms");
while (response.statusText === "error") {
[response] = yield* anotherGenerator();
}
}
Для запуска вышеуказанного кода вы делаете это:
const gen = myGenerator(); // Create generator
gen.next(); // Start it
gen.next((...args) => gen.next([...args])); // Set its callback function
Если вам нужно настроить таргетинг на браузеры, которые не поддерживают ES6, вы можете запустить код через Babel или short-compiler для генерации ECMAScript 5.
Обратный вызов ...args
завернут в массив и разрушен, когда вы их читаете так что шаблон может справиться с обратными вызовами, которые имеют несколько аргументов. Например, с узлом fs :
const [err, data] = yield fs.readFile(filePath, "utf-8", callback);
Я думаю, что файл хранилища ключей, который вы хотите использовать, имеет другой или неподдерживаемый формат в отношении вашей версии Java. Не могли бы вы разместить дополнительную информацию о своей задаче?
В общем, для решения этой проблемы вам может потребоваться воссоздать все хранилище ключей (например, с использованием другой версии JDK). В export-import ключи между старым и новым - если вам удастся открыть старое где-то еще.
Если это просто неподдерживаемая версия, попробуйте BouncyCastle crypto provider, например (хотя я не уверен, если он добавляет поддержку Java для большего количества типов хранилищ?).
Изменить: я просмотрел спецификацию спецификации BC.
(Re) установка последнего JDK (например, Oracle ) исправила его для меня.
Перед установкой последнего JDK, когда я выполнил следующую команду в Terminal.app :
keytool -list -keystore $(/usr/libexec/java_home)/jre/lib/security/cacerts -v
В результате:
keytool error: java.io.IOException: Invalid keystore format
java.io.IOException: Invalid keystore format
at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:650)
at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:55)
at java.security.KeyStore.load(KeyStore.java:1445)
at sun.security.tools.keytool.Main.doCommands(Main.java:792)
at sun.security.tools.keytool.Main.run(Main.java:340)
at sun.security.tools.keytool.Main.main(Main.java:333)
Но после установки последнего Oracle JDK и перезапуска терминала, выполнив следующую команду:
keytool -list -keystore $(/usr/libexec/java_home)/jre/lib/security/cacerts -v
Результаты в:
Enter keystore password:
Что указывает на то, что keytool на пути может получить доступ к хранилищу ключей.
Вы можете повредить файл во время копирования / передачи.
Используете ли вы maven? Если вы копируете файл хранилища ключей с «filter = true», вы можете повредить файл.
Пожалуйста, проверьте размер файла.
Я столкнулся с проблемой openJDK на ubuntu, должен был установить Oracle JDK, чтобы заставить его работать.
Вы можете следовать этому руководству на сайтах Google , чтобы сделать это.
Ваше хранилище ключей сломано, и вам придется восстановить или восстановить его.
Может быть, maven, кодирующий KeyStore, вы можете установить filtering = false для исправления проблемы.
<build>
...
<resources>
<resource>
...
<!-- set filtering=false to fix -->
<filtering>false</filtering>
...
</resource>
</resources>
</build>