簡體   English   中英

為什么我需要在承諾中解決響應

[英]Why i need to resolve a response in promise

我有一個像下面這樣的承諾:

let promise = new Promise((resolve, reject) => {
  axios.post("https://httpbin.org/post", params, header)
    .then(response => {
      resolve(Object.assign({}, response.data));
      // resolve("aaaa");
      console.log(response);
    })
    .catch(error => reject(error))
});

為什么我需要用響應數據來解決這個承諾?

如果我替換resolve(Object.assign({}, response.data));會發生什么? 逐行resolve("aaaa"); ?

任何人都可以幫助我嗎? 謝謝你。

值得一提的是axios.post()已經返回了一個Promise所以你不需要將它包裝在另一個Promise中。

這將起作用:

let promise = axios.post("https://httpbin.org/post", params, header)
  .then(response => {
    console.log(response);
    return Object.assign({}, response.data);
  });

// Later on...
promise.then(data => {
  console.log('Request successful:', data);
}, err => {
  console.log('Request failed:', err);
});

僅當您沒有鏈接現有的Promise時,才需要構造新的Promise對象,如下例所示:

function delay(duration) {
  return new Promise(resolve => setTimeout(resolve, duration));
}

delay(1000).then(() => {
  console.log('this code is delayed by 1s');
});

resolve()就像名字所說的那樣:它解析在函數調用中返回值的承諾。

因此,如果您有一個承諾並且它正在使用resolve('aaaaa') ,這意味着您的承諾將返回一個成功的狀態,其值為 'aaaaa'。

你也可以拒絕這個承諾。 這意味着您所做的呼叫在某些時候失敗了。 resolve()類似, reject()接受應由承諾返回的參數。

Promise 有兩個參數, resolvereject ,用於將響應發送回調用代碼。 如果您的承諾沒有錯誤地完成了它的代碼,那么您通過發送回響應(它可以是您想要的任何內容)來resolve()它,如果它失敗了,則reject()它,通常將錯誤作為參數傳遞。

resolve 函數的參數會被發送回調用函數,在then回調中,而reject 函數的參數可以在catch回調中找到。

例如

function myFunction(){
    return new Promise((resolve, reject) => {
        try{
            /* Do some async calls here */
            resolve(result); //Result is what you will find in "then"
        }catch(e){
            reject(e);
        }
    });
}

myFunction().then((response) => {
    /* Your logic here*/
}).catch((err) => {
    console.error(err);
}

您可以將resolve視為異步上下文中的return ,而reject類似於throw將被調用代碼捕獲的異常。

因此, resolve(myVariable)會將myVariable返回給調用 promise 函數的代碼,而resolve('aaa')將始終向調用代碼返回“aaa”。

它要做的就是使用參數"aaaa"而不是其原始值調用成功回調resolve

假設您傳遞了回調函數console.log 如果承諾解決,即成功,則將使用傳遞的參數調用回調( console.log("aaaa")

如果它沒有解決——如果它不成功——那么reject回調將根據你的.catch()語句被調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM