我打开一个文件来阅读这样的内容:
convertBlobToBase64(blob){
var convertPromise = new Promise(function(resolve, reject){
var fileReader = new FileReader();
fileReader.onload = function() {
var dataUrl = this.result;
var base64 = dataUrl.split(',')[1];
resolve(base64);
};
fileReader.readAsDataURL(blob);
});
return convertPromise;
}
然后我调用此函数并在结果解析时传递结果数据:
myFunction(audioFile){
var to64 = this.convertBlobToBase64(audioFile);
to64.then(function(base64Val){
var nextPromise = postCall();
nextPromise.then(//stuff);
return nextPromise;
});
return to64;
}
但是,当我调用myFunction时,它会立即返回一个已解析的promise,其中包含来自convertBlobToBase64
的已转换数据,而不是一个应该按预期等待nextPromise
的未解析的promise。
相反,myFunction的.then立即被调用并失败,因为它没有正确的数据。我误解了Promise的功能吗?
答案 0 :(得分:1)
试试这段代码:
myFunction(audioFile){
var to64 = this.convertBlobToBase64(audioFile);
return to64.then(function(base64Val){
var nextPromise = postCall();
return nextPromise.then(//stuff);
});
}
答案 1 :(得分:1)
顺便说一句,你不需要为函数包装另一个承诺。您可以将postCall用作解析函数并将其链接为:
myFunction(audioFile){
return convertBlobToBase64(audioFile)
.then(base64Val => postCall())
.then(//stuff)
}