我正在阅读Deferreds and Promises并继续发表$.when.apply($, someArray)
.我有点不清楚它究竟是做什么的,寻找一条线正确工作的解释(而不是整个代码片段).这是一些背景:
var data = [1,2,3,4]; // the ids coming back from serviceA
var processItemsDeferred = [];
for(var i = 0; i < data.length; i++){
processItemsDeferred.push(processItem(data[i]));
}
$.when.apply($, processItemsDeferred).then(everythingDone);
function processItem(data) {
var dfd = $.Deferred();
console.log('called processItem');
//in the real world, this would probably make an AJAX call.
setTimeout(function() { dfd.resolve() }, 2000);
return dfd.promise();
}
function everythingDone(){
console.log('processed all items');
}
Run Code Online (Sandbox Code Playgroud) 如果同时isset()
并empty()
产生完全相同的ISSET_ISEMPTY_DIM_OBJ
操作码,怎么能PHP VM分辨出两者之间的区别?
这段代码:
empty($a['b']);
isset($a['b']);
Run Code Online (Sandbox Code Playgroud)
产生以下操作码:
ISSET_ISEMPTY_DIM_OBJ $a, b -> TMP_VAR 0
FREE TMP_VAR 0
ISSET_ISEMPTY_DIM_OBJ $a, b -> TMP_VAR 1
FREE TMP_VAR 1
Run Code Online (Sandbox Code Playgroud)
另一个测试:
if (empty($a['b'])) {
echo 'abc';
}
if (isset($a['b'])) {
echo 'abc';
}
Run Code Online (Sandbox Code Playgroud)
这会产生:
ISSET_ISEMPTY_DIM_OBJ $a, b -> TMP_VAR 0
JMPZ TMP_VAR 0, &(BC4E00+4)
ECHO abc
JMP &(BC4E00+4)
ISSET_ISEMPTY_DIM_OBJ $a, b -> TMP_VAR 1
JMPZ TMP_VAR 1, &(BC4FE0+8)
ECHO abc
JMP &(BC4FE0+8)
Run Code Online (Sandbox Code Playgroud) 当我用我的调试器Pry运行Elixir代码时,它总是面对我 Allow? [Yn]