Thank you for your help.
Please tell me how to handle Promise return values.
■What you want to do
I want to get the value of the array that Promise processed.
■ Program
Access the path of the image written in the external JSON file and convert it to Base64 Image (repeated 5 times).← OK up to here
I plan to pass the converted Base64 Image string (←here) and display the image in PDF.
■What you can't do
in the following program:
where myData,
img_image01:base64,iVBORw0KG(…omitted…)'
img_image02:base64,iVBORw0KG(...omitted...)'
img_image03:base64,iVBORw0KG(...omitted...)'
I can pass the Base64 Image string like this, but
console.log(resolvedata)
Then,
Promise{[PromiseStatus]]: "resolved", [[PromiseValue]]: Array(1)}
and Promise wrapped (as per the documentation).
Array(1)
I'd like to take out only the part and use it as an array.
For example,
resolvedata ['img_image01']
If so,
'data:image/png; base64, iVBORw0KG(...omitted...)'
is the image that returns.
//-------------------------------------------------------------------------------
// Convert images in order with Promise and store them in myData
// ------------------------------------------------------------
var resolvedata=getContent().then((myData)=>{
getBase64Image(myData[0]['path_img'], myData[0]['image01', myData);
return myData;
}).then(myData)=>{
getBase64Image(myData[0]['path_img'], myData[0]['image02', myData);
return myData;
})
(…omitted…)
.then((myData)=>{
getBase64Image(myData[0]['path_img'], myData[0]['image05', myData);
return myData;
}).catch()=>{console.log('error')});
// ------------------------------------------------------------
// Import an external JSON file with the image path written on it and store it in myData (Promise)
// ------------------------------------------------------------
function getContent() {
return new Promise ((resolve, reject) = > {
httpObj = new XMLHttpRequest();
httpObj.open('get','(any file).json',true);
httpObj.send(null);
httpObj.onload=function(){
var myData=JSON.parse(this.responseText);
resolve(myData);
}
});
}
// ------------------------------------------------------------
// Convert file to Base64 (then)
// ------------------------------------------------------------
function getBase64Image(imgpath,imgfile,myData){
return new Promise((res,rej)=>{
if(imgfile=='){
res();
} else{
var path = imgpath;
var thisimagekey='img_'+imgfile.split('.')[0];
vargetimg='(any URL)'+path+'/'+imgfile;
varencoding=false;
if(encoding)return;
encoding = true;
varxhr = new XMLHttpRequest();
xhr.open('GET', getimg);
xhr.responseType='arraybuffer';
xhr.send(null);
xhr.onload=()=>{
var array_buffer = xhr.response;
Base64_From_ArrayBuffer_Async(array_buffer, function(base64){
vardata_url='data:'+xhr.getResponseHeader('Content-Type')+';base64,'+base64;
myData[0][thisimagekey]=data_url;
});
res(myData);
};
}
});
}
// ------------------------------------------------------------
// Convert to Base64
// ------------------------------------------------------------
functionBase64_From_ArrayBuffer_Async(ary_buffer, callback, increment){
vardic = [
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z', '0', '1'', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'
];
varbase64="";
variable_u8 = new Uint8 Array(ary_buffer);
var num =ary_u8.length;
varn = 0;
varb = 0;
if(increment===undefined) {
increment=10240;
}
vari = 0;
varj = 0;
function f(){
while(i<num){
b=ary_u8[i];
base64+=dic[(b>>2)];
n = (b&0x03)<<4;
i++;
if(i>=num)break;
b=ary_u8[i];
base64+=dic[n|(b>>4)];
n = (b&0x0f)<<2;
i++;
if(i>=num)break;
b=ary_u8[i];
base64+=dic[n|(b>>6)];
base64+=dic[(b&0x3f)];
i++;
j+=3;
if(j>increment){
j = 0;
setTimeout(f,1);
return;
}
}
varm = num%3;
if(m){
base64+=dic[n];
}
if(m==1){
base64+="==";
} else if(m==2){
base64+="=";
}
callback (base64);
}
setTimeout(f,1);
}
What should I write to retrieve myData?
Thank you for your cooperation.
(Excuse me for my poor Japanese)
To fix it easily, if you change each .then like this, it will work almost as expected:
Returns //v--getBase64Image
.then(myData)=>getBase64Image(myData[0]['path_img'], myData[0]['image01', myData))
.then(myData)=>getBase64Image(myData[0]['path_img'], myData[0]['image02', myData))
And finally, I'll do this
resolveData.then(result=>console.log(result));
The most wrong thing is that I have created a promise on getBase64Image() and I am not waiting for the promise result. If I return promise within then, the next then will be executed after the promise process is completed.
To add a little more, there is a way to write the above code a little more neatly.
I've done very similar things five times, but I can use Promise.all to treat the array a little more like an array for parallel processing.(And parallel processing can make it a little faster)
getContent().then(myData)=>
// Wait for all getbase64 Images
Promise.all([1,2,3,4,5].map(num=>)
getBase64Image(myData[0]['path_img'], myData[0]['image0'+num], myData)
))
.then()=>myData)
.then(myData)=>{
console.log(myData);
});
© 2026 OneMinuteCode. All rights reserved.