在使用Javascript Promises时,我是一个新手。在我当前的项目中,我相信Promises是我要完成的任务的候选人。该项目很简单,它是一种在线表单,可以向客户提交报价(或估价)。
我正在处理显示已提交报价的页面-(view-quote.html)
任务分解如下:
由于一个查询依赖于另一个查询,我以为我可以使用Fetch语句,该语句“可以”。
我认为我应该使用异步代码来完成此任务,对吗?我不确定。也许我需要传统的“回调”?
据我所知。我通过遵循我在Stack网站上找到的提示和教程将它们拼凑而成。
var getQuote = function() {
fetch(apiQuoteUrl+"GL555") // for testing, I hardcoded a quote num
.then(status)
.then(json)
.then(function(data) {
// WORKS - this DOES return me the client id
//alert(data[0].client_id);
gClient_id = data[0].client_id; // move to global var
}).catch(function(error) {
console.log('Request failed', error);
});
};
// This function takes one parameter, the client id
// which comes from the fetch call above.
var getClient = function(clientId) {
fetch()
.then(status)
.then(json)
.then(function(data) {
// TO BE DETERMINED, NOT SURE
// WHAT TO PUT HERE
}).catch(function(error) {
console.log('Request failed', error);
});
};
var getItems = function() {
fetch()
.then(status)
.then(json)
.then(function(data) {
// TO BE DETERMINED, NOT SURE
// WHAT TO PUT HERE
}).catch(function(error) {
console.log('Request failed', error);
});
};
function status(response) {
if (response.status >= 200 && response.status < 300) {
return Promise.resolve(response)
} else {
return Promise.reject(new Error(response.statusText))
}
}
function json(response) {
return response.json()
}
好,我已经准备好框架。但是,我不知道继续。我已经按照Fetch and Promises上的数十个教程进行了学习,但是它们并不完全符合我的需求,因此,我还是一头雾水。
因此,我现在感到担心的是,这使我变得比原来更难了。通过使用诺言,我是否还在正确的轨道上?
谢谢您的光临。非常感谢您的建议/代码帮助。
约翰
答案 0 :(得分:1)
他们也不为我工作!
你好!我相信我最近遇到了与您相同的问题:“束缚承诺”
快速搜索带来了here,我得以解决自己的问题。
最基本的是,您需要从诺言中返回一个值以.then()
。
因此,对于fetch()
,请尝试类似的操作
var getQuote = function() {
fetch(apiQuoteUrl + "GL555")
.then(status => return status.json())
.then(data => {
alert(data[0].client_id);
gClient_id = data[0].client_id;
}).catch(error => {
console.log('Request failed', error);
});
};