Вместо того, чтобы бросать код на вас, есть два понятия, которые являются ключом к пониманию того, как JS обрабатывает обратные вызовы и асинхронность. (это даже слово?)
Есть три вещи, о которых вам нужно знать; Очередь; цикл события и стек
. В широких упрощенных терминах цикл событий подобен диспетчеру проекта, он постоянно прослушивает любые функции, которые хотят запускать и взаимодействовать между очереди и стека.
while (queue.waitForMessage()) {
queue.processNextMessage();
}
Как только он получает сообщение для запуска чего-то, он добавляет его в очередь. Очередь - это список вещей, которые ждут выполнения (например, ваш запрос AJAX). Представьте себе это так:
1. call foo.com/api/bar using foobarFunc
2. Go perform an infinite loop
... and so on
Когда одно из этих сообщений будет исполнено, оно выталкивает сообщение из очереди и создает стек, стек - это все, что нужно выполнить JS для выполнения инструкции в сообщение. Таким образом, в нашем примере ему говорят позвонить foobarFunc
function foobarFunc (var) {
console.log(anotherFunction(var));
}
. Так что все, что foobarFunc должно выполнить (в нашем случае anotherFunction
), будет вставлено в стек. исполняемый, а затем забытый - цикл события затем переместится на следующую вещь в очереди (или прослушивает сообщения)
. Главное здесь - порядок выполнения. Это
Когда вы совершаете вызов с использованием AJAX для внешней стороны или выполняете любой асинхронный код (например, setTimeout), Javascript зависит от ответ, прежде чем он сможет продолжить.
Большой вопрос, когда он получит ответ? Ответ в том, что мы не знаем, поэтому цикл событий ждет, когда это сообщение скажет: «Эй, забери меня». Если JS просто ждал этого сообщения синхронно, ваше приложение замерзнет, и оно сосать. Таким образом, JS продолжает выполнение следующего элемента в очереди, ожидая, пока сообщение не будет добавлено обратно в очередь.
Вот почему с асинхронной функциональностью мы используем вещи, называемые обратными вызовами. Это похоже на обещание буквально. Как и в I , обещание что-то вернуть в какой-то момент jQuery использует специальные обратные вызовы, называемые deffered.done
deffered.fail
и deffered.always
(среди других). Вы можете увидеть их все здесь
Итак, вам нужно передать функцию, которая в какой-то момент будет выполнена с переданными ей данными.
Поскольку обратный вызов не выполняется немедленно, но в более позднее время важно передать ссылку на функцию, которую она не выполнила. поэтому
function foo(bla) {
console.log(bla)
}
, поэтому большую часть времени (но не всегда) вы пройдете foo
не foo()
. Надеюсь, это будет иметь смысл. Когда вы сталкиваетесь с такими вещами, которые кажутся запутанными, я настоятельно рекомендую полностью прочитать документацию, чтобы хотя бы понять ее. Это сделает вас намного лучшим разработчиком.
Сообщение об ошибке указывает на проблему с вашей версией Java. У вас установлен JDK?
Попробуйте добавить следующее (отмечая новую строку):
/! \ Убедитесь, что опция
blockquote>-vm
встречается перед командой-vmargs
. Все после-vmargs
передается непосредственно в JVM.-vm c:/wherever/java/jdk1.6.0_21/jre/bin/server/jvm.dll -vmargs...
... в ваш файл
eclipse.ini
, указывая на JDK, который вы хотите использовать, и убедитесь, что требуемый Версия Java по крайней мере такая же новая, как ваш JDK. Это путь для системы Windows.Если вы не знаете, где находится файл
eclipse.ini
: обычно он находится в папке вашегоeclipse.exe
. здесь (прокрутка вниз).].
Edit2: @KadoLakatt : причина, по которой установка последней версии Java работала для вас, заключается в том, что Eclipse проверяет стандартный путь для JVM, если он не находит
-vm
(см. здесь ). Однако я бы не рекомендовал это, так как вы ошибаетесь, полагая, что JVM используется. Если вы обновите Java (автоматически?), Вы можете столкнуться с проблемами в своем Eclipse, задаваясь вопросом, что вы, возможно, изменили. Лучше установите его в определенную папку вeclipse.ini
, чтобы быть уверенным.
также может быть так:
-vm
C:\Program Files\Java\jre6\bin\server\jvm.dll
Для тех из вас, кто пробовал все вышеперечисленные ответы без каких-либо успехов, попробуйте снизить значение -Xms. Я должен поддерживать более старый Eclipse (Weblogic Eclipse 10.3.6). У меня был следующий .ini на моей машине с Windows 7 и моей виртуальной машиной Windows Server 2008 R2 (версия Java ниже указывает на 32-разрядную Java), которая работали и отлично работали соответственно.
-vm
C:/Java/Java7/jdk1.7.0_79/bin/javaw.exe
-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.200.v20120522-1813
-showsplash
org.eclipse.platform
--launcher.defaultAction
openFile
-vmargs
-Xms1024m
-Xmx1024m
-XX:MaxPermSize=256m
-Dsun.lang.ClassLoader.allowArraySyntax=true
-Dweblogic.home=C:/Oracle/Middleware/wlserver_10.3
Итак, 32-разрядная Java для 32-разрядного Eclipse, но все же код выхода 1. Основываясь на всех ответах, которые я видел здесь, и единственное изменение будучи новым ноутбуком с Windows 10, единственным возможным объяснением было то, что новая ОС и Eclipse не соглашались на что-то. Поэтому я начал играть с каждым из значений, и это сработало, когда я опустил Xms и Xmx до 512m. У меня есть подозрение, что, возможно, новая ОС Windows предотвращает более высокий начальный размер кучи на основе некоторого условия выполнения (более высокие -Xms работают в Windows 10 на всех других подобных устройствах, с которыми я сталкивался), поэтому любое другое объяснение приветствуется. Тем временем следующее единственное значение, которое я настроил для успешного запуска Eclipse.
-Xms512m
Я столкнулся с подобными проблемами. Причина в том, что путь к моему затмению включает в себя иероглифы. После удаления этих символов проблема решена. Проверьте, есть ли в вашем пути символы, отличные от английского.
Я получил эту ошибку из коробки. Eclipse перестала работать, даже несмотря на то, что я не вносил изменений в конфигурацию и не устанавливал никаких новых jdk.
Вот мой файл eclipse.ini:
--clean
-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.200.v20130807-1835
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vm
C:/Program Files (x86)/Java/jre7/bin/javaw.exe
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xms40m
-Xmx1024m
Чтобы запустить Eclipse для запуска, я удален
-vmargs
-Dosgi.requiredJavaVersion=1.6
-vm
C:/Program Files (x86)/Java/jre7/bin/javaw.exe
Итак, вот мой обновленный файл:
--clean
-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.200.v20130807-1835
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-Xms40m
-Xmx1024m
Я понятия не имею, почему удаление osgi.requiredJavaVersion = 1.6 исправлено, так как моя версия jvm равна 1.6. Из документа doc http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fmisc%2Fruntime-options.html
osgi.requiredJavaVersion
The minimum java version that is required to launch Eclipse. The default value is "1.4.1".
Я думаю, что моя версия Java установлена правильно. Во всяком случае, Eclipse начинается и работает для меня сейчас ......
У меня была такая же проблема в моей Windows 7, 64-разрядной машине. Затем я загрузил и установил 64-разрядный jdk для Java (который включает jre). Это решило проблему.
Я тоже столкнулся с подобной проблемой, не решенной после добавления команды в файл eclipse.ini. Моя коренная причина другая. Я экспериментировал на диаграммах последовательности, используя objectaid. Это бросает исключение и нарушает мое рабочее пространство. У вас может быть другая проблема при работе с новыми плагинами. Лучше проверите файл журнала, расположенный в рабочем пространстве проекта C:\path\to\workspace\.metadata\.log
Я попытался изменить путь в параметре -vm, но это не помогло. Затем я удалил параметр -vm и -vmargs из eclipse.ini. Это сработало для меня
У меня была эта проблема недавно, но я не изменил ни одну java-версию, ни обновленную версию java. Возможно, эта проблема возникла из-за сбоя системы.
И после прочтения пары ответов здесь я решил изменить версию java от 1,6 до 1,7 в файле eclipse.ini.
-vmargs
-Dosgi.requiredJavaVersion=1.6
После этого изменения Eclipse начал хорошо, и он сработал. Поскольку я ничего не изменил, я решил изменить его на 1.6 до того, что изначально было.
Затем я начал затмение и догадывался, что он сработал. Так выглядит в моем случае просто касание / модификация файла eclipse.ini.
Я надеюсь, что этот ответ будет полезен кому-то.
Если ни одно из решений не работает, проверьте, установлено ли на вашей машине несколько версий java. Пожалуйста, сохраните только одну версию, которую вы предпочитаете, и все должно работать нормально.
просто для добавления здесь ... Для тех парней, которые все еще не смогли начать затмение из-за такой же ошибки, проверьте файл eclipse.ini еще раз и посмотрите, не забыл ли вы поместить M
после размера памяти. Например:
-Xmx1024
or
-Xmx1024MB
or
-Xmx1024 M
or
-Xmx1024 mb
or
-Xmx1024mb
неверны, это должно быть -Xmx1024M
. Я пробовал разные идеи из SOF и с других форумов, и в этом разрезе / вставке я забыл, что я пропустил M
(такая маленькая вещь, чтобы пропустить), поэтому я подумал, что должен поделиться. Если это работает для некоторых из вас, пожалуйста, голосуйте.
Ни один из вышеперечисленных ответов не помог мне. Я обнаружил, что в общем случае такая ошибка может означать, что ваш eclipse.ini имеет недопустимую запись. Таким образом, все приведенные выше ответы могут быть правильными, в зависимости от вашего конкретного случая. В моем случае, оказалось, я добавил аргумент locale с опечаткой в нем.
Непосредственное изменение файла eclipse - это не очень хорошая идея, независимо от того, фасет или ini, если только это не может быть изменено в eclipse. Была та же проблема, с установленной jdk1.8. Измените его на jdk 1.7.
Кроме того, согласно https://wiki.eclipse.org/Eclipse/Installation , необходимы как LUNA, так и MARS 1.7. Поэтому просто убедитесь, что он установлен.
Рабочие комбинации OS, JDK и бит затмения.
Пожалуйста, используйте 1 из приведенных выше комбинаций.
, если он говорит, что c: / program files / java / jre / bin / server / jvm.dll не найден, скопируйте jre из папки jdk и вставьте его вне папки jdk. а затем повторите попытку ...
У меня была та же проблема, которая была вызвана из-за аварийного отключения моих окон 10. Раньше в пути у меня был путь Oracle, то есть путь, вставленный Oracle во время установки JDK. Я удалил его и изменил путь к местоположению JDK. Это решило проблему.
Это можно решить, добавив следующую строку в файл eclipse.ini -XX: -UseCompressedOops