Turning nested jQuery Promises into flat code structure using .done() and .then()
up vote
1
down vote
favorite
This code uses jQuery promises in combination with callbacks does the following:
- Saves Group UUID to server using
storeGroupOnServer()
- Creates a DOM element for the group using
createGroupDomNode()
- Creates child elements for each image, using
createNewChildDomNode()
How can this be written more flat (avoiding the nesting), using .then()
?
var groupPromise = groupInstance.promise();
var arrayOfFiles = groupInstance.files();
groupPromise.done(function(fileGroupInfo) {
storeGroupOnServer(fileGroupInfo.uuid, function(groupid){
createGroupDomNode(groupid, function(groupnode){
$.each(arrayOfFiles, function(i, file) {
file.done(function(fileInfo) {
createNewChildDomNode(fileInfo.cdnUrl, groupnode);
});
});
});
});
});
Step 1: storeGroupOnServer()
:
storeGroupOnServer = function(uuid, callback) {
$.post('saveGroup.php', {uuid:uuid},
function(data) {
callback(data.groupid);
},'json');
};
Step 2: createGroupDomNode()
:
createGroupDomNode = function(groupid, callback) {
var cloner = $('#cloner');
var newnode = cloner.clone(true);
newnode.attr('id',groupid);
newnode.removeClass('hide');
cloner.after(newnode);
callback(newnode);
}
Step 3: createNewChildDomNode()
:
function createNewChildDomNode(imgpath, groupdom){
imgnode = $('<img/>').attr('src',imgpath);
picnode = $('<picture/>').append(imgnode);
$(groupdom).first().prepend(picnode);
}
javascript jquery promise
add a comment |
up vote
1
down vote
favorite
This code uses jQuery promises in combination with callbacks does the following:
- Saves Group UUID to server using
storeGroupOnServer()
- Creates a DOM element for the group using
createGroupDomNode()
- Creates child elements for each image, using
createNewChildDomNode()
How can this be written more flat (avoiding the nesting), using .then()
?
var groupPromise = groupInstance.promise();
var arrayOfFiles = groupInstance.files();
groupPromise.done(function(fileGroupInfo) {
storeGroupOnServer(fileGroupInfo.uuid, function(groupid){
createGroupDomNode(groupid, function(groupnode){
$.each(arrayOfFiles, function(i, file) {
file.done(function(fileInfo) {
createNewChildDomNode(fileInfo.cdnUrl, groupnode);
});
});
});
});
});
Step 1: storeGroupOnServer()
:
storeGroupOnServer = function(uuid, callback) {
$.post('saveGroup.php', {uuid:uuid},
function(data) {
callback(data.groupid);
},'json');
};
Step 2: createGroupDomNode()
:
createGroupDomNode = function(groupid, callback) {
var cloner = $('#cloner');
var newnode = cloner.clone(true);
newnode.attr('id',groupid);
newnode.removeClass('hide');
cloner.after(newnode);
callback(newnode);
}
Step 3: createNewChildDomNode()
:
function createNewChildDomNode(imgpath, groupdom){
imgnode = $('<img/>').attr('src',imgpath);
picnode = $('<picture/>').append(imgnode);
$(groupdom).first().prepend(picnode);
}
javascript jquery promise
Where isarrayOfFiles
defined?
– guest271314
Nov 17 at 23:36
@guest271314 Is defined outside the function, I've added it for completeness.
– bart
2 days ago
add a comment |
up vote
1
down vote
favorite
up vote
1
down vote
favorite
This code uses jQuery promises in combination with callbacks does the following:
- Saves Group UUID to server using
storeGroupOnServer()
- Creates a DOM element for the group using
createGroupDomNode()
- Creates child elements for each image, using
createNewChildDomNode()
How can this be written more flat (avoiding the nesting), using .then()
?
var groupPromise = groupInstance.promise();
var arrayOfFiles = groupInstance.files();
groupPromise.done(function(fileGroupInfo) {
storeGroupOnServer(fileGroupInfo.uuid, function(groupid){
createGroupDomNode(groupid, function(groupnode){
$.each(arrayOfFiles, function(i, file) {
file.done(function(fileInfo) {
createNewChildDomNode(fileInfo.cdnUrl, groupnode);
});
});
});
});
});
Step 1: storeGroupOnServer()
:
storeGroupOnServer = function(uuid, callback) {
$.post('saveGroup.php', {uuid:uuid},
function(data) {
callback(data.groupid);
},'json');
};
Step 2: createGroupDomNode()
:
createGroupDomNode = function(groupid, callback) {
var cloner = $('#cloner');
var newnode = cloner.clone(true);
newnode.attr('id',groupid);
newnode.removeClass('hide');
cloner.after(newnode);
callback(newnode);
}
Step 3: createNewChildDomNode()
:
function createNewChildDomNode(imgpath, groupdom){
imgnode = $('<img/>').attr('src',imgpath);
picnode = $('<picture/>').append(imgnode);
$(groupdom).first().prepend(picnode);
}
javascript jquery promise
This code uses jQuery promises in combination with callbacks does the following:
- Saves Group UUID to server using
storeGroupOnServer()
- Creates a DOM element for the group using
createGroupDomNode()
- Creates child elements for each image, using
createNewChildDomNode()
How can this be written more flat (avoiding the nesting), using .then()
?
var groupPromise = groupInstance.promise();
var arrayOfFiles = groupInstance.files();
groupPromise.done(function(fileGroupInfo) {
storeGroupOnServer(fileGroupInfo.uuid, function(groupid){
createGroupDomNode(groupid, function(groupnode){
$.each(arrayOfFiles, function(i, file) {
file.done(function(fileInfo) {
createNewChildDomNode(fileInfo.cdnUrl, groupnode);
});
});
});
});
});
Step 1: storeGroupOnServer()
:
storeGroupOnServer = function(uuid, callback) {
$.post('saveGroup.php', {uuid:uuid},
function(data) {
callback(data.groupid);
},'json');
};
Step 2: createGroupDomNode()
:
createGroupDomNode = function(groupid, callback) {
var cloner = $('#cloner');
var newnode = cloner.clone(true);
newnode.attr('id',groupid);
newnode.removeClass('hide');
cloner.after(newnode);
callback(newnode);
}
Step 3: createNewChildDomNode()
:
function createNewChildDomNode(imgpath, groupdom){
imgnode = $('<img/>').attr('src',imgpath);
picnode = $('<picture/>').append(imgnode);
$(groupdom).first().prepend(picnode);
}
javascript jquery promise
javascript jquery promise
edited 2 days ago
asked Nov 16 at 20:22
bart
1318
1318
Where isarrayOfFiles
defined?
– guest271314
Nov 17 at 23:36
@guest271314 Is defined outside the function, I've added it for completeness.
– bart
2 days ago
add a comment |
Where isarrayOfFiles
defined?
– guest271314
Nov 17 at 23:36
@guest271314 Is defined outside the function, I've added it for completeness.
– bart
2 days ago
Where is
arrayOfFiles
defined?– guest271314
Nov 17 at 23:36
Where is
arrayOfFiles
defined?– guest271314
Nov 17 at 23:36
@guest271314 Is defined outside the function, I've added it for completeness.
– bart
2 days ago
@guest271314 Is defined outside the function, I've added it for completeness.
– bart
2 days ago
add a comment |
1 Answer
1
active
oldest
votes
up vote
1
down vote
You can substitute return
ing Promise
objects from functions for using callbacks as parameters to function, to chain .then()
and .catch()
. Array.prototype.map()
and Promise.all()
can be substituted for jQuery.each()
which does not await the fulfillment of Promise
objects iterated.
Which requires return
ing the jQuery promise object from storeGroupOnServer
storeGroupOnServer = function(uuid, callback) {
return $.post('saveGroup.php', {uuid:uuid},'json')
.then(function(data) {
return data.groupid;
});
};
and returning a jQuery promise object of Promise
from createGroupDomNode
createGroupDomNode = function(groupid, callback) {
var cloner = $('#cloner');
var newnode = cloner.clone(true);
newnode.attr('id',groupid);
newnode.removeClass('hide');
cloner.after(newnode);
return $.Deferred().resolve(newnode);
}
and awaiting <img>
element load
event
function createNewChildDomNode(imgpath, groupdom){
return $.Deferred(function(dfd) {
imgnode = $('<img/>')
.on("load", dfd.resolve)
.on("error", dfd.reject)
.attr('src',imgpath);
picnode = $('<picture/>').append(imgnode);
$(groupdom).first().prepend(picnode);
}).promise();
}
For example
const data = {
uuid: {
1: 4,
2: 5,
3: 6
}
};
const response = {
4: "a",
5: "b",
6: "c"
};
const groupPromise = Promise.resolve(data.uuid[1]); // initial `Promise`
const arrayOfFiles = [Promise.resolve({
fileInfo: {
cdnUrl: 10
}
}), Promise.resolve({
fileInfo: {
cdnUrl: 20
}
}), Promise.resolve({
fileInfo: {
cdnUrl: 30
}
})];
const storeGroupOnServer = (uuid) => {
console.log({
uuid
});
// `return` response `Promise`
return Promise.resolve(response[uuid])
};
const createGroupDomNode = (groupid) => {
console.log({
groupid
});
// `return` `groupid`
return Promise.resolve(groupid)
};
const createNewChildDomNode = (groupdom, {
// destructure `cdnUrl` define as `imgpath`
fileInfo: {
cdnUrl: imgpath
}
}) => {
console.log({
imgpath,
groupdom
});
// process `<img>` elements here
// `return` resolved or rejected `Promise`
// at `load` or `error` event
return Promise.resolve("done processing " + imgpath)
};
let handleFiles = (groupnode, file) => {
console.log({
groupnode,
file
});
// handle each `file` `Promise`, pass `group` node to
// function passed to `.then()`
return file.then(createNewChildDomNode.bind(null, groupnode))
};
const handleGroupDomNodes = (groupnode) => {
console.log({
groupnode
});
// use `Promise.all()`, `.map()` to process array of `Promise` objects
return Promise.all(
arrayOfFiles.map(handleFiles.bind(null, groupnode))
)
};
groupPromise
.then(storeGroupOnServer)
.then(createGroupDomNode)
.then(handleGroupDomNodes)
.then(complete => console.log(complete)) // to illustrate chain completes
.catch(err => console.error(err)); // handle errors in chain
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
You can substitute return
ing Promise
objects from functions for using callbacks as parameters to function, to chain .then()
and .catch()
. Array.prototype.map()
and Promise.all()
can be substituted for jQuery.each()
which does not await the fulfillment of Promise
objects iterated.
Which requires return
ing the jQuery promise object from storeGroupOnServer
storeGroupOnServer = function(uuid, callback) {
return $.post('saveGroup.php', {uuid:uuid},'json')
.then(function(data) {
return data.groupid;
});
};
and returning a jQuery promise object of Promise
from createGroupDomNode
createGroupDomNode = function(groupid, callback) {
var cloner = $('#cloner');
var newnode = cloner.clone(true);
newnode.attr('id',groupid);
newnode.removeClass('hide');
cloner.after(newnode);
return $.Deferred().resolve(newnode);
}
and awaiting <img>
element load
event
function createNewChildDomNode(imgpath, groupdom){
return $.Deferred(function(dfd) {
imgnode = $('<img/>')
.on("load", dfd.resolve)
.on("error", dfd.reject)
.attr('src',imgpath);
picnode = $('<picture/>').append(imgnode);
$(groupdom).first().prepend(picnode);
}).promise();
}
For example
const data = {
uuid: {
1: 4,
2: 5,
3: 6
}
};
const response = {
4: "a",
5: "b",
6: "c"
};
const groupPromise = Promise.resolve(data.uuid[1]); // initial `Promise`
const arrayOfFiles = [Promise.resolve({
fileInfo: {
cdnUrl: 10
}
}), Promise.resolve({
fileInfo: {
cdnUrl: 20
}
}), Promise.resolve({
fileInfo: {
cdnUrl: 30
}
})];
const storeGroupOnServer = (uuid) => {
console.log({
uuid
});
// `return` response `Promise`
return Promise.resolve(response[uuid])
};
const createGroupDomNode = (groupid) => {
console.log({
groupid
});
// `return` `groupid`
return Promise.resolve(groupid)
};
const createNewChildDomNode = (groupdom, {
// destructure `cdnUrl` define as `imgpath`
fileInfo: {
cdnUrl: imgpath
}
}) => {
console.log({
imgpath,
groupdom
});
// process `<img>` elements here
// `return` resolved or rejected `Promise`
// at `load` or `error` event
return Promise.resolve("done processing " + imgpath)
};
let handleFiles = (groupnode, file) => {
console.log({
groupnode,
file
});
// handle each `file` `Promise`, pass `group` node to
// function passed to `.then()`
return file.then(createNewChildDomNode.bind(null, groupnode))
};
const handleGroupDomNodes = (groupnode) => {
console.log({
groupnode
});
// use `Promise.all()`, `.map()` to process array of `Promise` objects
return Promise.all(
arrayOfFiles.map(handleFiles.bind(null, groupnode))
)
};
groupPromise
.then(storeGroupOnServer)
.then(createGroupDomNode)
.then(handleGroupDomNodes)
.then(complete => console.log(complete)) // to illustrate chain completes
.catch(err => console.error(err)); // handle errors in chain
add a comment |
up vote
1
down vote
You can substitute return
ing Promise
objects from functions for using callbacks as parameters to function, to chain .then()
and .catch()
. Array.prototype.map()
and Promise.all()
can be substituted for jQuery.each()
which does not await the fulfillment of Promise
objects iterated.
Which requires return
ing the jQuery promise object from storeGroupOnServer
storeGroupOnServer = function(uuid, callback) {
return $.post('saveGroup.php', {uuid:uuid},'json')
.then(function(data) {
return data.groupid;
});
};
and returning a jQuery promise object of Promise
from createGroupDomNode
createGroupDomNode = function(groupid, callback) {
var cloner = $('#cloner');
var newnode = cloner.clone(true);
newnode.attr('id',groupid);
newnode.removeClass('hide');
cloner.after(newnode);
return $.Deferred().resolve(newnode);
}
and awaiting <img>
element load
event
function createNewChildDomNode(imgpath, groupdom){
return $.Deferred(function(dfd) {
imgnode = $('<img/>')
.on("load", dfd.resolve)
.on("error", dfd.reject)
.attr('src',imgpath);
picnode = $('<picture/>').append(imgnode);
$(groupdom).first().prepend(picnode);
}).promise();
}
For example
const data = {
uuid: {
1: 4,
2: 5,
3: 6
}
};
const response = {
4: "a",
5: "b",
6: "c"
};
const groupPromise = Promise.resolve(data.uuid[1]); // initial `Promise`
const arrayOfFiles = [Promise.resolve({
fileInfo: {
cdnUrl: 10
}
}), Promise.resolve({
fileInfo: {
cdnUrl: 20
}
}), Promise.resolve({
fileInfo: {
cdnUrl: 30
}
})];
const storeGroupOnServer = (uuid) => {
console.log({
uuid
});
// `return` response `Promise`
return Promise.resolve(response[uuid])
};
const createGroupDomNode = (groupid) => {
console.log({
groupid
});
// `return` `groupid`
return Promise.resolve(groupid)
};
const createNewChildDomNode = (groupdom, {
// destructure `cdnUrl` define as `imgpath`
fileInfo: {
cdnUrl: imgpath
}
}) => {
console.log({
imgpath,
groupdom
});
// process `<img>` elements here
// `return` resolved or rejected `Promise`
// at `load` or `error` event
return Promise.resolve("done processing " + imgpath)
};
let handleFiles = (groupnode, file) => {
console.log({
groupnode,
file
});
// handle each `file` `Promise`, pass `group` node to
// function passed to `.then()`
return file.then(createNewChildDomNode.bind(null, groupnode))
};
const handleGroupDomNodes = (groupnode) => {
console.log({
groupnode
});
// use `Promise.all()`, `.map()` to process array of `Promise` objects
return Promise.all(
arrayOfFiles.map(handleFiles.bind(null, groupnode))
)
};
groupPromise
.then(storeGroupOnServer)
.then(createGroupDomNode)
.then(handleGroupDomNodes)
.then(complete => console.log(complete)) // to illustrate chain completes
.catch(err => console.error(err)); // handle errors in chain
add a comment |
up vote
1
down vote
up vote
1
down vote
You can substitute return
ing Promise
objects from functions for using callbacks as parameters to function, to chain .then()
and .catch()
. Array.prototype.map()
and Promise.all()
can be substituted for jQuery.each()
which does not await the fulfillment of Promise
objects iterated.
Which requires return
ing the jQuery promise object from storeGroupOnServer
storeGroupOnServer = function(uuid, callback) {
return $.post('saveGroup.php', {uuid:uuid},'json')
.then(function(data) {
return data.groupid;
});
};
and returning a jQuery promise object of Promise
from createGroupDomNode
createGroupDomNode = function(groupid, callback) {
var cloner = $('#cloner');
var newnode = cloner.clone(true);
newnode.attr('id',groupid);
newnode.removeClass('hide');
cloner.after(newnode);
return $.Deferred().resolve(newnode);
}
and awaiting <img>
element load
event
function createNewChildDomNode(imgpath, groupdom){
return $.Deferred(function(dfd) {
imgnode = $('<img/>')
.on("load", dfd.resolve)
.on("error", dfd.reject)
.attr('src',imgpath);
picnode = $('<picture/>').append(imgnode);
$(groupdom).first().prepend(picnode);
}).promise();
}
For example
const data = {
uuid: {
1: 4,
2: 5,
3: 6
}
};
const response = {
4: "a",
5: "b",
6: "c"
};
const groupPromise = Promise.resolve(data.uuid[1]); // initial `Promise`
const arrayOfFiles = [Promise.resolve({
fileInfo: {
cdnUrl: 10
}
}), Promise.resolve({
fileInfo: {
cdnUrl: 20
}
}), Promise.resolve({
fileInfo: {
cdnUrl: 30
}
})];
const storeGroupOnServer = (uuid) => {
console.log({
uuid
});
// `return` response `Promise`
return Promise.resolve(response[uuid])
};
const createGroupDomNode = (groupid) => {
console.log({
groupid
});
// `return` `groupid`
return Promise.resolve(groupid)
};
const createNewChildDomNode = (groupdom, {
// destructure `cdnUrl` define as `imgpath`
fileInfo: {
cdnUrl: imgpath
}
}) => {
console.log({
imgpath,
groupdom
});
// process `<img>` elements here
// `return` resolved or rejected `Promise`
// at `load` or `error` event
return Promise.resolve("done processing " + imgpath)
};
let handleFiles = (groupnode, file) => {
console.log({
groupnode,
file
});
// handle each `file` `Promise`, pass `group` node to
// function passed to `.then()`
return file.then(createNewChildDomNode.bind(null, groupnode))
};
const handleGroupDomNodes = (groupnode) => {
console.log({
groupnode
});
// use `Promise.all()`, `.map()` to process array of `Promise` objects
return Promise.all(
arrayOfFiles.map(handleFiles.bind(null, groupnode))
)
};
groupPromise
.then(storeGroupOnServer)
.then(createGroupDomNode)
.then(handleGroupDomNodes)
.then(complete => console.log(complete)) // to illustrate chain completes
.catch(err => console.error(err)); // handle errors in chain
You can substitute return
ing Promise
objects from functions for using callbacks as parameters to function, to chain .then()
and .catch()
. Array.prototype.map()
and Promise.all()
can be substituted for jQuery.each()
which does not await the fulfillment of Promise
objects iterated.
Which requires return
ing the jQuery promise object from storeGroupOnServer
storeGroupOnServer = function(uuid, callback) {
return $.post('saveGroup.php', {uuid:uuid},'json')
.then(function(data) {
return data.groupid;
});
};
and returning a jQuery promise object of Promise
from createGroupDomNode
createGroupDomNode = function(groupid, callback) {
var cloner = $('#cloner');
var newnode = cloner.clone(true);
newnode.attr('id',groupid);
newnode.removeClass('hide');
cloner.after(newnode);
return $.Deferred().resolve(newnode);
}
and awaiting <img>
element load
event
function createNewChildDomNode(imgpath, groupdom){
return $.Deferred(function(dfd) {
imgnode = $('<img/>')
.on("load", dfd.resolve)
.on("error", dfd.reject)
.attr('src',imgpath);
picnode = $('<picture/>').append(imgnode);
$(groupdom).first().prepend(picnode);
}).promise();
}
For example
const data = {
uuid: {
1: 4,
2: 5,
3: 6
}
};
const response = {
4: "a",
5: "b",
6: "c"
};
const groupPromise = Promise.resolve(data.uuid[1]); // initial `Promise`
const arrayOfFiles = [Promise.resolve({
fileInfo: {
cdnUrl: 10
}
}), Promise.resolve({
fileInfo: {
cdnUrl: 20
}
}), Promise.resolve({
fileInfo: {
cdnUrl: 30
}
})];
const storeGroupOnServer = (uuid) => {
console.log({
uuid
});
// `return` response `Promise`
return Promise.resolve(response[uuid])
};
const createGroupDomNode = (groupid) => {
console.log({
groupid
});
// `return` `groupid`
return Promise.resolve(groupid)
};
const createNewChildDomNode = (groupdom, {
// destructure `cdnUrl` define as `imgpath`
fileInfo: {
cdnUrl: imgpath
}
}) => {
console.log({
imgpath,
groupdom
});
// process `<img>` elements here
// `return` resolved or rejected `Promise`
// at `load` or `error` event
return Promise.resolve("done processing " + imgpath)
};
let handleFiles = (groupnode, file) => {
console.log({
groupnode,
file
});
// handle each `file` `Promise`, pass `group` node to
// function passed to `.then()`
return file.then(createNewChildDomNode.bind(null, groupnode))
};
const handleGroupDomNodes = (groupnode) => {
console.log({
groupnode
});
// use `Promise.all()`, `.map()` to process array of `Promise` objects
return Promise.all(
arrayOfFiles.map(handleFiles.bind(null, groupnode))
)
};
groupPromise
.then(storeGroupOnServer)
.then(createGroupDomNode)
.then(handleGroupDomNodes)
.then(complete => console.log(complete)) // to illustrate chain completes
.catch(err => console.error(err)); // handle errors in chain
const data = {
uuid: {
1: 4,
2: 5,
3: 6
}
};
const response = {
4: "a",
5: "b",
6: "c"
};
const groupPromise = Promise.resolve(data.uuid[1]); // initial `Promise`
const arrayOfFiles = [Promise.resolve({
fileInfo: {
cdnUrl: 10
}
}), Promise.resolve({
fileInfo: {
cdnUrl: 20
}
}), Promise.resolve({
fileInfo: {
cdnUrl: 30
}
})];
const storeGroupOnServer = (uuid) => {
console.log({
uuid
});
// `return` response `Promise`
return Promise.resolve(response[uuid])
};
const createGroupDomNode = (groupid) => {
console.log({
groupid
});
// `return` `groupid`
return Promise.resolve(groupid)
};
const createNewChildDomNode = (groupdom, {
// destructure `cdnUrl` define as `imgpath`
fileInfo: {
cdnUrl: imgpath
}
}) => {
console.log({
imgpath,
groupdom
});
// process `<img>` elements here
// `return` resolved or rejected `Promise`
// at `load` or `error` event
return Promise.resolve("done processing " + imgpath)
};
let handleFiles = (groupnode, file) => {
console.log({
groupnode,
file
});
// handle each `file` `Promise`, pass `group` node to
// function passed to `.then()`
return file.then(createNewChildDomNode.bind(null, groupnode))
};
const handleGroupDomNodes = (groupnode) => {
console.log({
groupnode
});
// use `Promise.all()`, `.map()` to process array of `Promise` objects
return Promise.all(
arrayOfFiles.map(handleFiles.bind(null, groupnode))
)
};
groupPromise
.then(storeGroupOnServer)
.then(createGroupDomNode)
.then(handleGroupDomNodes)
.then(complete => console.log(complete)) // to illustrate chain completes
.catch(err => console.error(err)); // handle errors in chain
const data = {
uuid: {
1: 4,
2: 5,
3: 6
}
};
const response = {
4: "a",
5: "b",
6: "c"
};
const groupPromise = Promise.resolve(data.uuid[1]); // initial `Promise`
const arrayOfFiles = [Promise.resolve({
fileInfo: {
cdnUrl: 10
}
}), Promise.resolve({
fileInfo: {
cdnUrl: 20
}
}), Promise.resolve({
fileInfo: {
cdnUrl: 30
}
})];
const storeGroupOnServer = (uuid) => {
console.log({
uuid
});
// `return` response `Promise`
return Promise.resolve(response[uuid])
};
const createGroupDomNode = (groupid) => {
console.log({
groupid
});
// `return` `groupid`
return Promise.resolve(groupid)
};
const createNewChildDomNode = (groupdom, {
// destructure `cdnUrl` define as `imgpath`
fileInfo: {
cdnUrl: imgpath
}
}) => {
console.log({
imgpath,
groupdom
});
// process `<img>` elements here
// `return` resolved or rejected `Promise`
// at `load` or `error` event
return Promise.resolve("done processing " + imgpath)
};
let handleFiles = (groupnode, file) => {
console.log({
groupnode,
file
});
// handle each `file` `Promise`, pass `group` node to
// function passed to `.then()`
return file.then(createNewChildDomNode.bind(null, groupnode))
};
const handleGroupDomNodes = (groupnode) => {
console.log({
groupnode
});
// use `Promise.all()`, `.map()` to process array of `Promise` objects
return Promise.all(
arrayOfFiles.map(handleFiles.bind(null, groupnode))
)
};
groupPromise
.then(storeGroupOnServer)
.then(createGroupDomNode)
.then(handleGroupDomNodes)
.then(complete => console.log(complete)) // to illustrate chain completes
.catch(err => console.error(err)); // handle errors in chain
answered 2 days ago
guest271314
1315
1315
add a comment |
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f207833%2fturning-nested-jquery-promises-into-flat-code-structure-using-done-and-then%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Where is
arrayOfFiles
defined?– guest271314
Nov 17 at 23:36
@guest271314 Is defined outside the function, I've added it for completeness.
– bart
2 days ago