Javascript 带有Http响应的承诺链

Javascript 带有Http响应的承诺链,javascript,api,promise,Javascript,Api,Promise,我正在尝试承诺链,但我不太明白。我做了这个练习,我必须做以下场景: “您在向办公室成员的咖啡中添加盐来恶作剧,您需要使用/locateapi检查他的位置,'locate'可以是以下任意一种: response.body: 'in the office' response.body: 'in the kitchen' 你只在他在厨房的时候加盐,所以如果response.body返回“在厨房”,你就用另一个/addSalt的postapi给他的咖啡加盐 现在,本练习中有一个名为/run的最终api

我正在尝试承诺链,但我不太明白。我做了这个练习,我必须做以下场景:

“您在向办公室成员的咖啡中添加盐来恶作剧,您需要使用
/locate
api检查他的位置,'locate'可以是以下任意一种:

response.body: 'in the office'
response.body: 'in the kitchen'
你只在他在厨房的时候加盐,所以如果response.body返回“在厨房”,你就用另一个
/addSalt
postapi给他的咖啡加盐

现在,本练习中有一个名为
/run
的最终api端点,当满足以下任一条件时将调用该端点:

/locate returns 'in the office'
/addSalt is called.
我在没有加入任何api或json的情况下尝试了以下内容(尽管我希望如此),它看起来像这样:

函数myPromiseFunction(){
//更改解析值以采用不同的路径
返回承诺。解决(真实);
}
函数条件链接(值){
如果(value.body==='在厨房'){
//不要加盐,然后跑
返回addSalt(salt),然后(run);
}否则{
//跑
返回运行();
}
}
函数locate(){
//获取http获取位置,响应主体为“在他的办公室”或“在厨房”
返回承诺。解决(响应。正文);
}
功能添加盐(盐){
控制台日志(“添加盐”);
回报承诺。决心(“我们加了盐”);
}
函数运行(){
log(“我们正在运行”);
返回承诺。解决(“运行”);
}
myPromiseFunction().then(条件链接)。then(函数()){
log(“全部完成!”);
}).
捕捉(功能(e){
});
myPromiseFunction()应解析包含“在办公室”或“在厨房”的对象,该对象将条件链接的值传递给处理,并确定下一个操作。请参阅下面我针对您的用例调整的示例

函数locate(){
//const msg=“在办公室”;//选择其中一个返回,可以将另一个注释掉。
const msg=“厨房里”;
var obj={body:msg};
返回承诺。解决(obj);
}
功能添加盐(盐){
控制台日志(“添加盐”);
回报承诺。决心(“我们加了盐”);
}
函数运行(){
log(“我们正在运行”);
返回承诺。解决(“运行”);
}
函数条件链接(值){
如果(value.body==='在厨房'){
//不要加盐,然后跑
返回addSalt(“某些盐值,因为它未被u定义”)。然后(运行);
}else if(value.body==='在办公室'){
log(“嘿,你在办公室”);
}否则{
//跑
返回运行();
}
}
//在这个函数中,假设您解析字符串“在厨房”或“在办公室”
//这是为了让conditionalChaining函数接收其中一个字符串并处理下一个操作。
函数myPromiseFunction(){
返回承诺。解析(locate());
}
myPromiseFunction().then(条件链接)。then(函数(){
log(“全部完成!”);

});
它不起作用,因为没有
响应
并且
没有
正文
属性。您可以使用“复制代码段”来回答“按钮提供了一个可运行的堆栈溢出示例,而不是让人们转到另一个站点……谢谢,这是对我试图使用的引用文章的一个很好的解释。现在,当我使用json响应创建虚拟api端点时,应该会简单得多。当根据api调用的返回值将它们链接在一起时,您会推荐这种方法吗?我认为只要它对您有效,并且您能够理解它就可以了。将来,当您得到一系列承诺时,您可以考虑其他改进或方法,例如使用async和Wait。当您第一次开始承诺时,执行流程可能会非常混乱,因此请先花时间理解它。