Javascript 我可以报告Q promise进度而不创建延迟报告吗?
我正在通过调用Javascript 我可以报告Q promise进度而不创建延迟报告吗?,javascript,promise,q,Javascript,Promise,Q,我正在通过调用然后创建一个承诺 我可以从内部报告进度吗,还是必须使用Q.defer(它有notify) 我不太清楚你所说的“通过调用然后来创建承诺”是什么意思。我猜你的意思是,你在用一个定义好的词来回报一个承诺?即 var iAmAPromise=其他承诺。然后(doSomething); 如果是这种情况,那么您可以使用适当的通知将doSomething包装到回调函数中。一个有效的例子: var Q = require('q'); function resolver(deferred){
然后创建一个承诺
我可以从内部报告进度吗,还是必须使用Q.defer
(它有notify
)
我不太清楚你所说的“通过调用然后
来创建承诺”是什么意思。我猜你的意思是,你在用一个定义好的词来回报一个承诺?即
var iAmAPromise=其他承诺。然后(doSomething);
如果是这种情况,那么您可以使用适当的通知将doSomething
包装到回调函数中。一个有效的例子:
var Q = require('q');
function resolver(deferred){
return function(){
deferred.resolve('return value from initial promise');
}
}
function someOtherPromise( ms ) {
var deferred = Q.defer();
setTimeout( resolver(deferred) , ms );
return deferred.promise;
}
function doSomething(data, cb){
console.log('----- doing something with:', data);
var val = "Did something with: " + data;
cb(val);
}
function reportProgress(doSomething, notifierCb){
notifierCb('waiting on it');
return function(someOtherPromiseResponse){
console.log('--- got promise response: ', someOtherPromiseResponse);
notifierCb('got response', someOtherPromiseResponse);
console.log('--- do something with it');
notifierCb('doing something with it');
doSomething(someOtherPromiseResponse, function(val){
notifierCb('done, result was:', val);
});
};
}
function notifier(update, detail){
console.log('Notifier update:', update, detail||"");
}
function logError(err){
console.log('ERROR:', err);
}
var iAmAPromise = someOtherPromise(1000).then(reportProgress(doSomething, notifier)).catch(logError);
console.log(' (Am I a Promise?)', Q.isPromise(iAmAPromise));
不过我可能误解了你的问题。结果是:不,我不能
另请参见原因。使用deferred.notify()
已经有一段时间没有人问这个问题了
例如:
函数doSomething(){
var deferred=Q.deferred();
setTimeout(函数(){
延期。通知(10);
},500);
setTimeout(函数(){
延期通知(40);
},1500);
setTimeout(函数(){
延期通知(60);
},2500);
setTimeout(函数(){
延期通知(100);
延迟。解决();
},3500);
回报。承诺;
}
doSomething()
.那么(
函数(){
//成功
console.log('done');
},
功能(err){
//有一个错误,
},
职能(进展){
//我们在执行过程中会收到进度通知
控制台日志(进度);
});代码>
你好,谢谢你的回复。我添加了一个代码示例。我知道我可以使用任意回调,但我想知道我是否可以在不使用Q.defer
的情况下让Q的promise
处理程序工作。
var Q = require('q');
function resolver(deferred){
return function(){
deferred.resolve('return value from initial promise');
}
}
function someOtherPromise( ms ) {
var deferred = Q.defer();
setTimeout( resolver(deferred) , ms );
return deferred.promise;
}
function doSomething(data, cb){
console.log('----- doing something with:', data);
var val = "Did something with: " + data;
cb(val);
}
function reportProgress(doSomething, notifierCb){
notifierCb('waiting on it');
return function(someOtherPromiseResponse){
console.log('--- got promise response: ', someOtherPromiseResponse);
notifierCb('got response', someOtherPromiseResponse);
console.log('--- do something with it');
notifierCb('doing something with it');
doSomething(someOtherPromiseResponse, function(val){
notifierCb('done, result was:', val);
});
};
}
function notifier(update, detail){
console.log('Notifier update:', update, detail||"");
}
function logError(err){
console.log('ERROR:', err);
}
var iAmAPromise = someOtherPromise(1000).then(reportProgress(doSomething, notifier)).catch(logError);
console.log(' (Am I a Promise?)', Q.isPromise(iAmAPromise));
var progress = 96;
deferred.notify(progress);