Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 非异步承诺回调_Javascript_Promise_Q - Fatal编程技术网

Javascript 非异步承诺回调

Javascript 非异步承诺回调,javascript,promise,q,Javascript,Promise,Q,在非PromisifiedAPI完成其异步工作后,如果依次调用bar和bam,此代码是否会按预期工作?是,它将按预期工作q通过在一元API中无声地包装它们,按顺序处理非预期的同步函数。是的,它将按预期工作q通过在一元API中无声地包装它们,按顺序处理非预期的同步函数。是的,它将按预期工作q通过在一元API中无声地包装它们,按顺序处理非预期的同步函数。是的,它将按预期工作q通过在一元API中无声地包装它们,按顺序处理非预期的同步函数(正如预期的那样)。下面是一个代码片段,它向您展示了它的工作原理(

非PromisifiedAPI
完成其异步工作后,如果依次调用
bar
bam
,此代码是否会按预期工作?

是,它将按预期工作
q
通过在一元API中无声地包装它们,按顺序处理非预期的同步函数。

是的,它将按预期工作
q
通过在一元API中无声地包装它们,按顺序处理非预期的同步函数。

是的,它将按预期工作
q
通过在一元API中无声地包装它们,按顺序处理非预期的同步函数。

是的,它将按预期工作
q
通过在一元API中无声地包装它们,按顺序处理非预期的同步函数(正如预期的那样)。

下面是一个代码片段,它向您展示了它的工作原理(使用我建议的语法)

函数日志(msg){document.body.innerHTML+=“”+msg+“

”;} 函数nonPromisifiedApi(选项、失败、回调){ 日志(“非Promisifiedapi”); setTimeout(函数(){ 回调(“非ROM的异步结果”); },选项。时间); } 函数异步(选项){ 返回Q.Promise(函数(解析、拒绝){ 非PromisifiedAPI(选项、拒绝、功能(val){ 日志(“异步(val:+val+”); 解析(“异步的结果”); }); }); } 功能同步1(val){ 日志(“同步1(val:+val+”); //过滤返回的值 返回“sync1的结果”; } 功能同步2(val){ 日志(“同步2(val:+val+”); //无返回=>未定义 } 异步({time:1000}) 。然后(同步1) 。然后(同步2) .then(功能(val){ 日志(“结束(val:+val+”) });
这里有一个代码片段向您展示了它的工作原理(使用我建议的语法)

函数日志(msg){document.body.innerHTML+=“”+msg+“

”;} 函数nonPromisifiedApi(选项、失败、回调){ 日志(“非Promisifiedapi”); setTimeout(函数(){ 回调(“非ROM的异步结果”); },选项。时间); } 函数异步(选项){ 返回Q.Promise(函数(解析、拒绝){ 非PromisifiedAPI(选项、拒绝、功能(val){ 日志(“异步(val:+val+”); 解析(“异步的结果”); }); }); } 功能同步1(val){ 日志(“同步1(val:+val+”); //过滤返回的值 返回“sync1的结果”; } 功能同步2(val){ 日志(“同步2(val:+val+”); //无返回=>未定义 } 异步({time:1000}) 。然后(同步1) 。然后(同步2) .then(功能(val){ 日志(“结束(val:+val+”) });
这里有一个代码片段向您展示了它的工作原理(使用我建议的语法)

函数日志(msg){document.body.innerHTML+=“”+msg+“

”;} 函数nonPromisifiedApi(选项、失败、回调){ 日志(“非Promisifiedapi”); setTimeout(函数(){ 回调(“非ROM的异步结果”); },选项。时间); } 函数异步(选项){ 返回Q.Promise(函数(解析、拒绝){ 非PromisifiedAPI(选项、拒绝、功能(val){ 日志(“异步(val:+val+”); 解析(“异步的结果”); }); }); } 功能同步1(val){ 日志(“同步1(val:+val+”); //过滤返回的值 返回“sync1的结果”; } 功能同步2(val){ 日志(“同步2(val:+val+”); //无返回=>未定义 } 异步({time:1000}) 。然后(同步1) 。然后(同步2) .then(功能(val){ 日志(“结束(val:+val+”) });
这里有一个代码片段向您展示了它的工作原理(使用我建议的语法)

函数日志(msg){document.body.innerHTML+=“”+msg+“

”;} 函数nonPromisifiedApi(选项、失败、回调){ 日志(“非Promisifiedapi”); setTimeout(函数(){ 回调(“非ROM的异步结果”); },选项。时间); } 函数异步(选项){ 返回Q.Promise(函数(解析、拒绝){ 非PromisifiedAPI(选项、拒绝、功能(val){ 日志(“异步(val:+val+”); 解析(“异步的结果”); }); }); } 功能同步1(val){ 日志(“同步1(val:+val+”); //过滤返回的值 返回“sync1的结果”; } 功能同步2(val){ 日志(“同步2(val:+val+”); //无返回=>未定义 } 异步({time:1000}) 。然后(同步1) 。然后(同步2) .then(功能(val){ 日志(“结束(val:+val+”) });
您测试过吗?看起来,
bar
将执行-然后
bam
将执行,但它们之间没有承诺。。因此,运行
bam
时,不能保证
bar
是完整的!你的评论“你测试过了吗”可以应用于本网站50%的评论。我刚刚测试了它,并将把我的发现添加到答案中。注释的其余部分显然是错误的。您的
deferred.resolve
deferred.reject
作为未绑定到实际延迟对象的函数传递。此外,bar和bam将一个接一个地执行,没有任何延迟,感谢您强调绑定问题。然而,考虑到它“有效”,我怀疑q是否为了方便而预先绑定了这些函数。另外,请注意,延迟的使用是不标准的,现在被认为是不好的做法。您可以考虑使用<代码> Q.Promise <代码> API。更好的是,您可以使用ES6 polyfill而不是
Q
(例如)。这里有一篇关于承诺的好文章:。阅读它可能会回答你可能遇到的大部分问题。你测试过它吗?看起来,
bar
将执行-然后
bam
将执行,但它们之间没有承诺。。因此,运行
bam
时,不能保证
bar
是完整的!你的评论“你测试过了吗”可以应用于本网站50%的评论。我刚刚测试了它,并将把我的发现添加到答案中。这个
function foo(options) {
  var deferred = q.defer();
  nonPromisifiedApi(options, deferred.resolve, deferred.reject);
  return deferred.promise;
}

function bar() {}

function bam() {}

foo({})
  .then(bar)
  .then(bam);