Вы могли P/Invoke CreateFile
и передавать эти FILE_FLAG_DELETE_ON_CLOSE
флаг. Это говорит Windows удалять файл, как только все дескрипторы закрываются. См. также: Win32 CreateFile
документы .
Generally, the best way to handle this type of issue is to use some form of callback function. Actually, it is really the only practicable solution -- the only other option is coding your own extensions to the browser, and that is a little much (unless you really like banging your head against a wall). There are actually quite a few parallel questions on these boards: you might try searching for some, many are very good.
Modifying your code:
function checkEmail(email) {
/*
original parts of the function here!
*/
if (email.length) {
$.getJSON('ajax/validate', {email: email}, function(data){
if (data == false) {
// stuff
}
checkEmailResponse( data );
})
}
}
function checkEmailResponse( data )
{
// do something with the data.
}
Вам также следует использовать обратный вызов, потому что вызов является асинхронным и, следовательно, спроектируйте весь исходный код JavaScript вокруг этой идеи (как указывали другие).
Если вам действительно действительно нужно получить в качестве возвращаемого значения вам необходимо отключить асинхронный вызов, но это не рекомендуется вообще, поскольку он блокирует страницу до тех пор, пока не появится ответ.
function checkEmail(email, callback) {
if (email.length)
return $.ajax({
data: {email: email},
url: 'ajax/validate',
async: false
}).responseText; // only the raw response text of the XMLHttpRequest
}
}
У вас может быть родительский функциональный блок, пока там что-то не будет. А чтобы снизить нагрузку на процессор, вы можете использовать какой-то тайм-аут.
function checkEmail(email) {
if (email.length) {
var ret = null;
$.getJSON('ajax/validate', {email: email}, function(data){
if (data == false) {
// stuff
}
ret = data;
})
while(ret == null){
}
return ret;
}
}
Надеюсь, это поможет.
Вам просто нужно изменить подход к проблеме. Вы знаете, что то, что у вас есть выше, не будет работать, поэтому вы не можете думать в терминах «вызвать функцию и работать с ее возвращаемым значением».
Вам нужно переключиться на что-то вроде предложения Тоби для CPS, или, в зависимости от того, что запускает эту функцию, обрабатывать ее с помощью пользовательских событий.