为什么这个m.request被调用两次

时间:2017-02-08 07:40:23

标签: javascript mithril.js

我正在使用Mithrill v1.0.0,这是代码

var scrollable = {};

scrollable.Product = {
    list : [],
    loadList : function(store){
        m.request({
            method : "GET",
            url : "APIUrl" + store,
            withCredentials : true
        }).then(function(result){
            scrollable.Product.list = result;
        })
    }
}

scrollable.oninit = function(){
    scrollable.Product.loadList("authentic")
}

scrollable.view  = function(){
    console.log(scrollable.Product.list.result) //Here's give me two line log
}

在控制台上,它给我两行日志,第一个是未定义的,第二个是带有API结果值的数组。

2 个答案:

答案 0 :(得分:1)

  

m.request的调用会返回一个承诺,并在完成其承诺链时触发重绘。

     

m.request docs

它首先绘制两次,然后在m.request完成后再绘制一次。

答案 1 :(得分:0)

我从未使用过Mithrill但是从ReactJS的角度来看,我猜测由于异步调用解决而导致的状态更改会触发重新呈现(即再次运行scrollable.view)。

以下是我的想法:

  1. 初始状态:list为空

  2. scrollable.oninit运行:异步方法;不能马上解决。

  3. scrollable.view运行:控制台打印仍为空list

  4. 2中的异步方法结算。 list被分配了获取的值。

  5. 检测到状态更改,触发scrollable.view再次运行。控制台现在使用API​​值打印list