鍍金池/ 問(wèn)答/HTML/ ES6 Promise的問(wèn)題

ES6 Promise的問(wèn)題

function runAsync(callback){
    setTimeout(function(){
        console.log('111');
        callback('222');
    }, 2000);
}

runAsync(function(data){
    console.log(data);
});

剛接觸這個(gè) 請(qǐng)問(wèn) callback('222')這行代碼是什么意思 ?

回答
編輯回答
苦妄

2000毫秒后打印出 111 并調(diào)用傳進(jìn)來(lái)的callback函數(shù),傳入實(shí)參 222

2017年11月24日 22:41
編輯回答
神經(jīng)質(zhì)

回調(diào)函數(shù)。
因?yàn)楫惒绞鼓銦o(wú)法得到逐行自上而下運(yùn)行代碼的結(jié)果,異步任務(wù)會(huì)使當(dāng)前作用域的同步任務(wù)執(zhí)行完才執(zhí)行異步的結(jié)果。
就像你定了一份外賣,是無(wú)法立即送達(dá)的,而你又要事先填好收貨地址(否則你永遠(yuǎn)拿不到外賣,而這個(gè)callback,就是你訂外賣的收貨地址)。

Promise是異步中的微任務(wù)(跟你這個(gè)例子沒(méi)什么關(guān)系),而你這里的setTimeout是一個(gè)異步中的宏任務(wù)。

2018年6月10日 21:48
編輯回答
逗婦乳

類似模擬Promise返回?cái)?shù)據(jù),平時(shí)mock數(shù)據(jù)時(shí)可以用,加上定時(shí)器實(shí)際是模擬ajax請(qǐng)求后端數(shù)據(jù)的延時(shí)。

runAsync(function(data){
    //console.log(data);
    return Promise.resolve(data);
});

這個(gè)函數(shù)里面的回調(diào)函數(shù)可以返回data,此data即是你mock的數(shù)據(jù),比如你按照接口協(xié)議返回的數(shù)據(jù)是

{
  status:‘success’,
  data: {
    list: [],
    field: {},
    ....
  }
}

runAsync中返回的data可以用.then(res => {/res即data值,其他后續(xù)邏輯在此處完成/})

2017年7月8日 01:31
編輯回答
不討囍

這不是Promise,是回調(diào)。

function runAsync(callback){
    setTimeout(function(){
        console.log('111');
        callback('222');
    }, 2000);
}
runAsync(param => console.log(param));

運(yùn)行結(jié)果如下:
圖片描述

2018年7月21日 03:29