问题描述
我目前正在使用React Native,并决定使用Parse(parse.com)设置我的应用程序。
我遇到了一个带有React Native和Parse Promise的奇怪错误-当我通过Parse Promise一个回调时,它将运行该回调中的所有内容,但场景中没有任何变化。 本质上,当解析承诺解析后,UI不会更新-但是,在我点击屏幕后,所有更新都会按预期进行。
这是一个代码段,在通过Parse成功登录后,我试图导航到一个新场景。 我正在做的就是将导航对象传递给新路线。 “登录成功”和“已调用导航功能”都输出到控制台,但是场景首先不会转换。 但是,当我在任意位置轻按屏幕后,场景将按预期过渡。
var navigate = function(object) {
console.log("Navigate function called!");
this.props.navigator.push(/* route object */);
}.bind(this);
Parse.User.logIn("email", "password").then(
function(object) {
console.log("Login successful!");
navigate(object);
},
function(error) {
console.log(error.message);
},
);
对可能发生的事情有什么想法/见解?
注意:我使用常规的Javascript Promises尝试了相同的代码,例如:
new Promise(resolve, reject)) ...)
一切都按预期进行。 具有setTimeout的其他版本也可以工作。 因此,我的结论是,React Native确实处理了Promise回调和异步调用(问题不在于此)。
为了确保它不是React Native navigator
器中的错误,我还尝试了通过setState
调用更新视图,并且发生了完全相同的问题。
也许Parse承诺不会以某种方式更新主线程?
也许解析承诺的实现方式导致了React Native视图冻结?
1楼
cl0udc0ntr0l
1
2015-10-12 19:30:52
尝试使用ES6 Promises(或任何其他第三方Promise库)时,我遇到了同样的问题。 我能够通过使用react-native的本地promise实现来解决它。
Promise = require('react-native/Libraries/Promise');
我知道您正在使用解析,因此可能需要请求请求才能获取解析承诺以返回本机??承诺。 希望这对我有所帮助的人有所帮助。