В моем приложении, когда элемент перетаскивается, он создает ссылку и добавляет ее к переносу данных перетаскивания, чтобы его можно было удалить за пределами браузера (например, в notepad ++).
Эта ссылка необходимабыть созданным путем вызова сервера, чтобы получить некоторую информацию.Я реализовал вызов на наш сервер, который возвращает уникальный идентификатор, который необходимо добавить в ссылку, чтобы сделать его действительным.
Проблема в том, что этот вызов на сервер возвращает обещание, и я не могу установить событие перетаскивания.передавать данные после разрешения обещания, даже если оно разрешено до завершения операции перетаскивания.
Пожалуйста, посмотрите на это fiddle .
$('#div1').on('dragstart', function (event) {
event.originalEvent.dataTransfer.setData("text/plain", "Div1 Drag Data");
});
$('#div2').on('dragstart', function (event) {
getURL(event);
});
function getURL(e){
getUniqueId().then(
function(id){
console.log("#####");
e.originalEvent.dataTransfer.setData("text/plain", id);
}
)
}
function getUniqueId(){
var deferred = new $.Deferred();
//deferred.resolve("kj5689fdjbgr89j");//immediate resolve
setTimeout(function(){ deferred.resolve("kj5689fdjbgr89j"); }, 5);
return deferred.promise();
}
Перетаскивание 'ПервыйЭлемент 'в notepad ++ правильно помещает' Div1 Drag Data 'в notepad ++.Перетаскивание «Второго элемента» ничего не помещает в блокнот ++.Кроме того, если обещание выполнено немедленно, оно работает нормально.Но даже задержка в 5 миллисекунд приводит к тому, что она не работает.
Любой совет приветствуется.Спасибо.