javascript - 请教一下jq的回调函数改成promise实现的问题
漂亮男人
漂亮男人 2017-05-19 10:41:59
0
2
608

代码段1

var prepayment_apply,prepayment_operational; // loadMain().then(loadBtn()).then(function () { console.log(prepayment_operational); // undefined return loadProgress(); }); // fun1 function loadMain() { return $.ajax({ url:'...', success:function (data) { prepayment_apply = data.prepayment_apply; } }) } // fun2 function loadBtn() { return $.ajax({ url:'...', success:function (data) { prepayment_operational = data.prepayment_operational; } }) } // fun3 $.ajax({ url:'...', type:'get', dataType:'json', load_animation:true, success:function (data) { ... } })

我将$.ajax封装到函数函数中时,用promise写法打出的prepayment_operational是undefined。

代码段2

var prepayment_apply,prepayment_operational; // loadMain().then(function () { $.ajax({ url: '...', success: function (data) { prepayment_operational = data.prepayment_operational; } }) } ) .then(function () { console.log(prepayment_operational); // '111' return loadProgress(); });

当我直接把ajax写在then中就能得到我想要的值。并且当我把代码段1中的

loadMain().then(loadBtn()).then(function () { console.log(prepayment_operational); // undefined return loadProgress(); });

改成

loadMain().then(function () {return loadBtn()}).then(function () { console.log(prepayment_operational); // undefined return loadProgress(); });

代码段1也能正常console出prepayment_operational。
想请教下这是为什么。

漂亮男人
漂亮男人

全部回复 (2)
phpcn_u1582

then拿到的应该是一个函数,而不是其他的东西。。。

loadMain().then(loadBtn)....

    给我你的怀抱

    jQ里本身有Promise的(在deferred模块里),比如:

    $.ajax({ url:'...', success:function (data) { prepayment_operational = data.prepayment_operational; } });

    这种写法就是传统的,而:

    $.ajax({ url:'...' }).done(function (data) { prepayment_operational = data.prepayment_operational; });

    这种就是用了jQ内置的Promise机制($.ajax本身会返回Promise,可以挂.done()或者.fail())。也可以用.promise()动态返回promise对象。

    具体参考jQ文档的“延迟对象”吧。

      最新下载
      更多>
      网站特效
      网站源码
      网站素材
      前端模板
      关于我们 免责声明 Sitemap
      PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!