2017-10-19 35 views
0

我使用承诺函数promisify XHR,我想知道如何获得响应,并将其发回服务器,如果响应成功。使用承诺构造函数发送一个值到服务器

我做这样的事情

function createChannel(method, url) { 
    return new Promise(function (resolve, reject) { 
     xhr.open(method, url, true); 
     xhr.setRequestHeader("Content-Type", "application/json"); 
    xhr.onload = function() { 
     if (xhr.readyState == 4) { 
      var hashValue = resolve(JSON.parse(xhr.responseText)); 
      console.log(hashValue); 
     } 
     else { 
      reject({ 
       status: this.status, 
       statusText: xhr.statusText 
      }); 
     } 
    }; 
    xhr.onerror = function() { 
      reject({ 
       status: this.status, 
       statusText: xhr.statusText 
      }); 
     }; 
    xhr.send(json); 
}); 
} 
createChannel(method, url) 
    .then(function (datums) { 
    console.log(datums) 
}).catch(function (err) { 
    console.error('Sorry There Was An Error!', err.statusText); 
}); 

如果这createChannel成功,我会想采取散列值的变量,并且向服务器请求获得新的价值。

.then(function (createChannel) { 
    console.log(createChannel);  
}); 

这可能使用诺言吗? 谢谢你的建议。

+0

目前还不清楚什么是“再发送出去”的意思?当你得到解决的承诺,并在'.then()'处理程序中获得'datums'值时,你想在那一点做什么? – jfriend00

+0

hey @ jfriend00对于我所选择的措辞感到抱歉,我希望在获得解决的承诺时向服务器/网址发出新请求。 我想采取哈希变量,并提出新的发布请求 – PythonRookie

+0

好吧,我在我的答案中显示。 – jfriend00

回答

1

里面你.then()处理程序,只是发出一个新的请求,并返回这个承诺,它链接到第一:

createChannel(method, url).then(function (datums) { 
    console.log(datums); 
    // call some other async function here that returns a promise 
    return someOtherFunctionThatReturnsAPromise(datums); 
}).then(function(finalResult) { 
    console.log(finalResult);   
}).catch(function (err) { 
    console.error('Sorry There Was An Error!', err.statusText); 
}) 
+0

谢谢,看来这是我感到困惑,我会试试看看它是否有效。 – PythonRookie

+0

Hello @ jfriend00,我想知道,createchannel是否已经保存了hashvalue变量的值? 我不知道我是否问了一个愚蠢的问题,我应该已经知道了。感谢您的帮助 – PythonRookie

+0

我想通了,谢谢。 – PythonRookie