目前,我正在努力用jquery对话框替换"alert"/"confirm".
但是大多数遗留代码都是以某种异步方式编写的,这使得它很难改变.有没有办法让jquery对话框以同步方式工作?(不要使用循环或回调函数)
For example:
function run()
{
var result = confirm("yes or no");
alert( result );
\\more codes here
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,警报和其他代码将在用户选择后执行.
如果我们使用jquery对话框var result = $ dialog.open()它将继续执行异步警报.
目前,我的解决方案是在OK | Cancel功能中使用回调函数.例如:
OK: function ()
{
$dialog.close();
alert("yes");
//more codes here
}
Run Code Online (Sandbox Code Playgroud)
此方法有效,但很难使所有同步代码变为异步,这需要进行大量更改(请参阅以下示例).所以我正在寻找同步jQuery Dialog,它可能吗?
例如:(实际代码比下面的例子复杂得多)
function f1()
{
if ( confirm("hello") ) f2();
alert("no");
}
function f2()
{
if( confirm("world") ) f3();
alert("no");
}
function f3()
{
return confirm("!") ;
}
Run Code Online (Sandbox Code Playgroud)
另一个例子:
vendorObject.on('some-event', function() {
if(confirm("Do you really want to do that?")) …Run Code Online (Sandbox Code Playgroud) 目标:我想要的是从数据库中获取数据并刷新main.php(通过draw_polygon更明显)每次在数据库中添加内容时(在$ .ajax之后提交给submit_to_db.php).
所以基本上我有一个main.php将ajax调用另一个php来接收一个将被保存到数据库的数组,并且json调用另一个php来返回一个数组将被main.php使用.
$(document).ready(function() {
get_from_db();
$('#button_cancel').click(function(){
$.ajax({
url: 'submit_to_db.php',
type: 'POST',
data: {list_item: selected_from_list},
success: function(result){
...
get_from_db();
}
});
});
function get_from_db(){
$.getJSON('get_from_db.php', function(data) {
...
draw_polygon(data);
});
}
});
Run Code Online (Sandbox Code Playgroud)
在我的例子中,我所做的是一个get_from_db函数调用,getJSON实际从数据库中获取数据,并使用数据draw_polygon.但是应该怎么做呢?我是一个完整的新手,这是我第一次尝试getJSON和ajax说实话.所以我的问题:异步如何实际工作?是否有其他的办法解决这个,而不必调用函数get_from_db与getJSON(这是不同步的,是它那为什么它时,它不是一个函数内没有更新页面?)所有的时间-就像$.ajax用async: false(顺便说一句,我无法让它工作.我的方法很有效,但我想也许还有其他更好的方法可以做到.我很想学习如何.提前致谢.我希望我有任何意义.
为了使它更清晰,这就是我想要实现的目标:
@start页面,从数据库中获取数据(目前通过getJSON)canvas使用data我正在使用MongoDB的Node.JS驱动程序,我想执行同步查询,如下所示:
function getAThing()
{
var db = new mongo.Db("mydatabase", server, {});
db.open(function(err, db)
{
db.authenticate("myuser", "mypassword", function(err, success)
{
if (success)
{
db.collection("Things", function(err, collection)
{
collection.findOne({ name : "bob"}, function(err, thing)
{
return thing;
});
});
}
});
});
}
Run Code Online (Sandbox Code Playgroud)
问题是,db.open是一个异步调用(它不会阻塞),因此getAThing返回"undefined",我希望它返回查询结果.我确信我可以使用某种阻塞机制,但我想知道做这样的事情的正确方法.
我很好奇所有的javascript回调是否都是异步的,或者只是在某些情况下是这种情况.此外,我确定是什么让javascript代码异步(或使用异步javascript的方法)在浏览器和nodejs之间有所不同,所以我想知道在每种情况下什么构成真正的异步javascript.
我的印象是,在下面的场景中,我实际上并没有编写异步代码.
function addOne(value){
value = value + 1;
return value;
}
function simpleMap(values, callback){
for(i = 0; i < values.length; i++){
val = values[i];
val = callback(val);
values[i] = val;
}
return values;
}
newValues = simpleMap([1,2,3], addOne);
Run Code Online (Sandbox Code Playgroud)
但是,例如,我知道jQuery的AJAX函数是真正异步的(不考虑现在可用的承诺).是什么让jQuery的AJAX异步?是否涉及XHR请求这么简单,在浏览器中,所有XHR请求都是异步的?
我对nodejs环境有同样的问题.节点中的某些东西只有在涉及文件i/o,process.nextTick,setTimeout或setInterval之类的东西时才能是异步的吗?为什么当我使用mongodb/mongoose进行数据库调用时,是异步的?幕后发生了怎样的事情呢?
异步"情况"是否由环境预先确定?或者是否有某种方法可以使自己的函数真正异步而不利用环境的非常特定的函数(例如xhr,节点中的文件io,process.nexttick等)?
我有一个可执行文件,我使用shell命令调用:
Shell (ThisWorkbook.Path & "\ProcessData.exe")
Run Code Online (Sandbox Code Playgroud)
可执行文件执行一些计算,然后将结果导出回Excel.我希望能够在导出后更改结果的格式.
换句话说,我首先需要Shell命令等待,直到可执行文件完成其任务,导出数据,然后执行下一个格式化命令.
我试过了Shellandwait(),但没有太多运气.
我有:
Sub Test()
ShellandWait (ThisWorkbook.Path & "\ProcessData.exe")
'Additional lines to format cells as needed
End Sub
Run Code Online (Sandbox Code Playgroud)
不幸的是,格式化仍然在可执行文件完成之前进行.
仅供参考,这是我使用ShellandWait的完整代码
' Start the indicated program and wait for it
' to finish, hiding while we wait.
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32.dll" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccessas …Run Code Online (Sandbox Code Playgroud)
我想从我自己的包含数组的服务器加载一个JSON文件到一个javascript对象变量.
我希望在页面加载开始时以同步方式执行此操作,因为在页面加载期间需要数据.
我设法使用jQuery.getJSON,但这是asynch ajax,它似乎有点矫枉过正.
有没有办法以同步的方式加载JSON而不进行自己的解析?
(或多或少喜欢使用<script language="JavaScript" src="MyArray.json"></script>)
在此先感谢任何帮助,希望它是有道理的,因为我是一个JavaScript新手.保罗
在Java中创建异步方法的同步版本的最佳方法是什么?
假设你有一个使用这两种方法的类:
asyncDoSomething(); // Starts an asynchronous task
onFinishDoSomething(); // Called when the task is finished
Run Code Online (Sandbox Code Playgroud)
如何doSomething()在任务完成之前实现不返回的同步?
当与编程相关时,我对术语异步感到困惑.在编程术语中,它似乎意味着与词典中定义的相反.例如,同步一词意味着:
同时发生; 时间一致; 同期; 同时.
以相同的速度和完全一起进行; 一起重复.
然而,维基百科说:
"在编程中,异步事件是独立于主程序流的事件.异步动作是在非阻塞方案中执行的动作,允许主程序流继续处理."
是不是"非阻塞"并且允许"主程序流程继续处理"的同步或"同时发生"?似乎同步一词表示"非阻塞"和异步,"阻塞".为什么这些术语在与编程相关时似乎反向使用,或者它与我不理解的低级计算有关?
当我使用同步AJAX调用时,我会执行以下操作...
$.ajax({
url: somefile.php,
async: false,
success: {
...code that gets run on success...
}
});
...code that gets run after the ajax-success code runs...
Run Code Online (Sandbox Code Playgroud)
有了这个,它实际上在运行脚本的其余部分之前等待响应,这是一个阻塞动作.那么为什么这个被称为同步,当它与任何其他过程不同步时,实际上却相反?
同步HTTP处理程序和异步HTTP处理程序之间是否存在性能差异?IHttpHandler vs IHttpAsyncHandler
为什么选择另一个?
有什么好处?
我正在Node.js中编写一个程序(在某些情况下)想要充当一个简单的过滤器:从stdin读取所有内容(直到文件末尾),进行一些处理,将结果写入stdout.
你怎么做'从stdin'读取一切?到目前为止我发现的最接近的解决方案,似乎一次从控制台一行一行,或者只在stdin是文件而不是管道时工作.
synchronous ×10
asynchronous ×5
javascript ×4
jquery ×3
node.js ×3
getjson ×2
.net ×1
ajax ×1
c# ×1
definition ×1
dialog ×1
httphandler ×1
java ×1
json ×1
mongodb ×1
parsing ×1
shell ×1
stdin ×1
sync ×1
vba ×1