From af89ba6b050d9a2479cf0bcad810ed3bf27d2f87 Mon Sep 17 00:00:00 2001 From: Rick Date: Fri, 15 Jan 2016 00:27:12 +0100 Subject: [PATCH] Fixes #51: in componentDidMount() wait for the promise in componentWillMount() to complete before fetching deferred fragments. --- package.json | 8 ++++---- src/lib/createContainer.js | 22 ++++++++++++++-------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index df56717..1f3fb92 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "react-transmit", "description": "Relay-inspired library based on Promises instead of GraphQL.", - "version": "3.1.6", + "version": "3.1.7", "license": "BSD-3-Clause", "repository": { "type": "git", @@ -38,9 +38,9 @@ "react": "0.14.6", "react-dom": "0.14.6", "react-hot-loader": "1.3.0", - "react-inline-css": "2.0.1", - "webpack": "1.12.10", - "webpack-dev-server": "1.14.0" + "react-inline-css": "2.1.0", + "webpack": "1.12.11", + "webpack-dev-server": "1.14.1" }, "engines": { "node": ">=0.10.32" diff --git a/src/lib/createContainer.js b/src/lib/createContainer.js index 47f1273..42ae0c5 100644 --- a/src/lib/createContainer.js +++ b/src/lib/createContainer.js @@ -44,9 +44,7 @@ module.exports = function (Component, options) { var promise = Container.fragments[fragmentName](variables); if (typeof promise === "function" && isRootContainer(Container)) { - return new promiseProxy.Promise(function (resolve, reject) { - resolve(promise); - }); + return promiseProxy.Promise.resolve(promise); } return promise; @@ -94,11 +92,16 @@ module.exports = function (Component, options) { this._mounted = true; if (isRootContainer(Container)) { - var deferredFragments = this.missingFragments(false); + var promise = this.fetching || Promise.resolve(null); + var _this = this; - if (deferredFragments.length) { - this.forceFetch({}, deferredFragments); - } + promise.then(function () { + var deferredFragments = _this.missingFragments(false); + + if (deferredFragments.length) { + _this.forceFetch({}, deferredFragments); + } + }); } }, componentWillUnmount: function () { @@ -237,7 +240,10 @@ module.exports = function (Component, options) { var missingFragments = this.missingFragments(true); if (missingFragments.length) { - this.forceFetch({}, missingFragments, true); + var _this = this; + this.fetching = this.forceFetch({}, missingFragments, true).then(function () { + _this.fetching = false; + }); } else { this.callOnFetchHandler(promiseProxy.Promise.resolve({}));