以下是Trevor Burnham" Async JavaScript"的代码示例。书(The Pragmatic Bookshelf,2012):
"a"
这让我很困惑,为什么可以安排未申报的"回调"使用setTimeout的函数?代码在节点中执行OK,但它到底做了什么?是否呼叫"回调"真的安排在指定的时间点执行,他们真的执行了吗?
答案 0 :(得分:1)
callback
未被声明,它作为参数传递给匿名函数,就在这里:
function(callback) { setTimeout(callback, 100); }
^^^^^^^^ ^^^^^^^^
| |
+----------------------+
它是由实际执行匿名函数的人提供的。 The documentation for async.series
说:
tasks
- 包含要运行的函数的集合,每个函数都会传递callback(err, result)
,它必须在完成时调用,并显示错误err
(可以是null
)和可选的result
值。
答案 1 :(得分:1)
是...
DECLARE
vVersion varchar2(100);
BEGIN
/* get the version */
SELECT DISTINCT version
into vVersion
from PRODUCT_COMPONENT_VERSION;
--
/* loop through users */
for i in ( select * from DBA_USERS_WITH_DEFPWD) loop
/* print a different statement, based on vVersion, for the current user */
if ( vVersion = '12.1.0.2.0' ) then
dbms_output.put_line('Alter user ' || i.username || ' identified by values ' || '''EE3FD1E715941451''' || ';');
else
dbms_output.put_line('Alter user ' || i.username || ' identified by values ' || '''Invalid Password''' || ';');
end if;
end loop;
END;
...
已定义,但不在您的脚本中。它在callback
模块的source代码中定义:
async
'use strict';
export default function(tasks) {
function makeCallback(index) {
function fn() {
if (tasks.length) {
tasks[index].apply(null, arguments);
}
return fn.next();
}
fn.next = function() {
return (index < tasks.length - 1) ? makeCallback(index + 1) : null;
};
return fn;
}
return makeCallback(0);
}
模块定义一个函数,并将其作为async
参数传递给每个串联函数。