У Ruby есть превосходный камень обещания . Ваш пример будет выглядеть так:
require 'future'
def method_one
...
def method_nth
def summary
result1 = future { method_one }
......
resultn = future { method_nth }
collect_results result1, ..., resultn
end
Просто, не правда ли? Но давайте перейдем к более подробной информации. Это объект будущего:
result1 = future { method_one }
Это означает, что result1
оценивается в фоновом режиме. Вы можете передать его другим методам. Но result1
пока не дал никакого результата, он все еще обрабатывается в фоновом режиме. Подумайте о том, чтобы обойти Нить. Но главное отличие в том, что в тот момент, когда вы пытаетесь прочитать его, вместо того, чтобы передавать его, он блокирует и ждет результата в этой точке. Таким образом, в приведенном выше примере все переменные result1 .. resultn
будут обрабатываться в фоновом режиме, но когда придет время собирать результаты и когда вы попытаетесь фактически прочитать эти значения, чтение будет ожидать завершения запросов на этот момент.
Установите драгоценный камень promise
и попробуйте следующее в консоли Ruby:
require 'future'
x = future { sleep 20; puts 'x calculated'; 10 }; nil
# adding a nil to the end so that x is not immediately tried to print in the console
y = future { sleep 25; puts 'y calculated'; 20 }; nil
# At this point, you'll still be using the console!
# The sleeps are happening in the background
# Now do:
x + y
# At this point, the program actually waits for the x & y future blocks to complete
Редактировать: опечатка в result
, должна была быть result1
, изменить echo
на puts
Вы можете удалить атрибут title
при загрузке страницы.
$(document).ready(function() {
$('[title]').removeAttr('title');
});
Если вам понадобится использовать заголовок позже, вы можете сохранить его в данных jQuery элемента ()
.
$(document).ready(function() {
$('[title]').each(function() {
$this = $(this);
$.data(this, 'title', $this.attr('title'));
$this.removeAttr('title');
});
});
Другой вариант - изменить имя атрибута title
на aTitle
или что-то еще, что браузер будет игнорировать, а затем обновить любой JavaScript для прочтите имя нового атрибута вместо title
.
Обновление:
Интересная идея, которую вы могли бы использовать, - «лениво» удалить заголовок при наведении курсора на элемент. Когда пользователь наводит указатель мыши на элемент, вы можете вернуть значение заголовка.
Это не так просто, как должно быть, потому что IE этого не делает. • правильно удалить всплывающую подсказку при наведении курсора, если вы установили для атрибута title значение null
или удалили атрибут title. Однако, если вы установите для всплывающей подсказки пустую строку ( ""
) при наведении курсора, всплывающая подсказка будет удалена из всех браузеров, включая Internet Explorer.
Вы можете использовать упомянутый выше метод, чтобы сохранить атрибут title в методе jQuery data (...)
, а затем вернуть его в mouseout
.
$(document).ready(function() {
$('[title]').mouseover(function () {
$this = $(this);
$this.data('title', $this.attr('title'));
// Using null here wouldn't work in IE, but empty string will work just fine.
$this.attr('title', '');
}).mouseout(function () {
$this = $(this);
$this.attr('title', $this.data('title'));
});
});
Вы можете использовать jQuery для удаления содержимого атрибута заголовка или переместить его в какой-либо другой параметр для дальнейшего использования.
Это означает, что вы теряете некоторую доступность.
RE : ClueTip Поиск в Google, кажется, предполагает, что это обычная проблема - это происходит только в IE? ClueTip, похоже, работает должным образом в FireFox.
Взломайте ClueTip
, чтобы использовать переименованный атрибут заголовка.