帖子
帖子
用户
博客
课程
显示全部楼层
30
帖子
0
勋章
44
Y币
发表于 2015-5-9 08:29:48
30
已解决

model异步问题 [复制链接]

  • 发表于:2015-05-09 08:29:48
function count()
{                        
var model = api.require('model');
                        var query = api.require('query');
                model.config({
                            appId: "A6973137458204",
                            appKey: "716831C7-EA2A-AECB-182D-BC7BF7A4E4E0"
                });
                        query.createQuery(function (ret, err) {
                    if (ret && ret.qid) {
                        query.whereEqual({
                            qid: ret.qid,
                            column: 'self',
                            value: 'xue'
                        });
                        model.count({
                        class:'friends',
                        qid:ret.qid
                },function(ret,err){
                        alert("第一个query查询里的count值:"+ret["count"]);
                        $api.setStorage("friend_count",ret["count"]);
                        return ret["count"];
                });
                }
                });
}
                    alert("query外的count值为:"+count());
                    alert("setStorage里的值为:"+$api.getStorage("friend_count"));

运行结果:第一个query查询里的count值:1
query外的count值为:undefined(我知道是异步问题,有没有好的解决办法,让他先执行完成,求教!);
setStorage里的值为:1(之后我执行了另一个查询,想用$api.getStorage("friend_count"),但是都是用的上一次运行时的$api.getStorage("friend_count"),这是为什么,求教!);

yyyfx
8
帖子
0
勋章
1万+
Y币
最佳答案
1. 关于异步 JavaScript 里面的异步函数最好不要使用返回值,而是使用回调函数执行后续操作。 可以参考如下的方式: 2. 关于 localStorage $api.getStorage 和 $api.setStorage 操作的是 HTML5 中的 localStorage。如果不手动清除的话,保存在 localStorage 中的变量会一直存在。
8
帖子
0
勋章
1万+
Y币
1. 关于异步
JavaScript 里面的异步函数最好不要使用返回值,而是使用回调函数执行后续操作。
可以参考如下的方式:
  1. function count(callback)  {
  2.     var model = api.require('model');
  3.     var query = api.require('query');
  4.     model.config({
  5.         appId: "A6973137458204",
  6.         appKey: "716831C7-EA2A-AECB-182D-BC7BF7A4E4E0"
  7.     });

  8.     query.createQuery(function(ret, err) {
  9.         if (ret && ret.qid) {
  10.             query.whereEqual({
  11.                 qid: ret.qid,
  12.                 column: 'self',
  13.                 value: 'xue'
  14.             });

  15.             model.count({
  16.                 class: 'friends',
  17.                 qid: ret.qid
  18.             }, function(ret, err) {
  19.                 alert("第一个query查询里的count值:" + ret["count"]);
  20.                 $api.setStorage("friend_count", ret["count"]);
  21.                
  22.                 // return ret["count"];
  23.                 callback(ret["count"]);
  24.             });
  25.         }
  26.     });
  27. }

  28. // 调用上面的异步 count 函数,参数为回调函数
  29. count(function(count) {
  30.     alert("query外的count值为:" + count);
  31.     alert("setStorage里的值为:" + $api.getStorage("friend_count"));
  32. });
复制代码

2. 关于 localStorage
$api.getStorage 和 $api.setStorage 操作的是 HTML5 中的 localStorage。如果不手动清除的话,保存在  localStorage 中的变量会一直存在。


30
帖子
0
勋章
44
Y币
yyyfx 发表于 2015-5-9 09:58
1. 关于异步
JavaScript 里面的异步函数最好不要使用返回值,而是使用回调函数执行后续操作。
可以参考如下 ...

谢谢!已解决!
您需要登录后才可以回帖 登录

本版积分规则