Prototype.then 未被使用
Prototype.then isn't being used
一段时间以来,我一直对 promises 感到困惑:我在 post 异步函数请求中使用 bluebird Promise,然后使用 .then()
显示结果并将其放入 res.json()
。问题是,我根本看不到 .then()
被使用。
var transcribe = function(){
return new Promise(function(resolve, reject){
speech.startRecognition(aux.gsUri, aux.fileType, function(err, operation, res) {
if (err) {
console.error(err);
}
else {
operation.on('error', function(err){
console.error(err);
}).on('complete', function(transcript){
var returnAllTranscripts = [];
transcript.forEach(function(block){
returnAllTranscripts.push(block.transcript);
});
return returnAllTranscripts;
});
}
});
})
}
transcribe().then(function(data){ //transcribe() function works
console.log("Now on THEN"); //but not .then(), logging here
res.json(data)
});;
您需要 resolve/reject 您的 Promise 才能命中您的 Promise 链的 then/catch。
var transcribe = function(){
return new Promise(function(resolve, reject){
speech.startRecognition(aux.gsUri, aux.fileType, function(err, operation, res) {
if (err) {
console.error(err);
return reject(err); // <-- REJECT ERROR HERE
} else {
operation.on('error', function(err){
console.error(err);
return reject(err); // <-- REJECT ERROR HERE
}).on('complete', function(transcript){
var returnAllTranscripts = [];
transcript.forEach(function(block){
returnAllTranscripts.push(block.transcript);
});
return resolve(returnAllTranscripts); <-- RESOLVE "THEN" VALUE HERE
});
}
});
})
}
transcribe().then(function(data){ //transcribe() function works
console.log("Now on THEN"); //but not .then(), logging here
res.json(data)
})
.catch(err => console.log(err));
一段时间以来,我一直对 promises 感到困惑:我在 post 异步函数请求中使用 bluebird Promise,然后使用 .then()
显示结果并将其放入 res.json()
。问题是,我根本看不到 .then()
被使用。
var transcribe = function(){
return new Promise(function(resolve, reject){
speech.startRecognition(aux.gsUri, aux.fileType, function(err, operation, res) {
if (err) {
console.error(err);
}
else {
operation.on('error', function(err){
console.error(err);
}).on('complete', function(transcript){
var returnAllTranscripts = [];
transcript.forEach(function(block){
returnAllTranscripts.push(block.transcript);
});
return returnAllTranscripts;
});
}
});
})
}
transcribe().then(function(data){ //transcribe() function works
console.log("Now on THEN"); //but not .then(), logging here
res.json(data)
});;
您需要 resolve/reject 您的 Promise 才能命中您的 Promise 链的 then/catch。
var transcribe = function(){
return new Promise(function(resolve, reject){
speech.startRecognition(aux.gsUri, aux.fileType, function(err, operation, res) {
if (err) {
console.error(err);
return reject(err); // <-- REJECT ERROR HERE
} else {
operation.on('error', function(err){
console.error(err);
return reject(err); // <-- REJECT ERROR HERE
}).on('complete', function(transcript){
var returnAllTranscripts = [];
transcript.forEach(function(block){
returnAllTranscripts.push(block.transcript);
});
return resolve(returnAllTranscripts); <-- RESOLVE "THEN" VALUE HERE
});
}
});
})
}
transcribe().then(function(data){ //transcribe() function works
console.log("Now on THEN"); //but not .then(), logging here
res.json(data)
})
.catch(err => console.log(err));