2 回答

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超4個(gè)贊
Promise 中處理的是一個(gè)異步調(diào)用,異步調(diào)用是非阻塞式的,也就是說(shuō),你在調(diào)用的時(shí)候并不知道它什么時(shí)候結(jié)束,當(dāng)然也就不會(huì)等到他返回一個(gè)有效數(shù)據(jù)之后再進(jìn)行下一步處理。但是——
異步調(diào)用的內(nèi)容是知道什么時(shí)候結(jié)束的,它結(jié)束之后可以發(fā)出通知。我們一般使用回調(diào)函數(shù)來(lái)獲得這個(gè)通知,比如
function item(args, callback) { // <-- 注意 callback 傳入一個(gè)處理函數(shù) // .... p.then((value) => { console.log(value); callback(value); // <-- 取得值之后通過(guò)回調(diào)進(jìn)行下一步處理 }); } item(blabla, (value) => console.log(`got ${value}`) // <-- 這就是上面提到的 callback);
不過(guò)除非特殊情況,一般不應(yīng)該把 Promise 處理成回調(diào),而應(yīng)該直接返回 Promise,以便后續(xù)進(jìn)行基于 Promise 規(guī)范的處理,比如
function item(args) { // <-- 它返回一個(gè) Promise // .... return p.then((value) => { console.log(value); return value; }); }// 繼續(xù)按 Promise 規(guī)劃在外面進(jìn)行處理item.then(value => console.log(`got ${value}`));
這樣寫(xiě)起來(lái)似乎不是很符合常見(jiàn)的同步代碼編寫(xiě)習(xí)慣,那可以用 async/await,具體參考閱讀:

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超7個(gè)贊
嗯,我想說(shuō)的是不能直接在then里面用嗎?
function item(){ return new Promise(resolve => { resolve('aaaa') } ) } item().then(value=> { console.log(value); })
或者是你直接用個(gè)延時(shí)去???
添加回答
舉報(bào)