2017-08-07 90 views
1

我需要顺序执行一系列'promisified'函数(我的意思是同步,因为在每一个都需要前一个的结果)。 此代码打印bar1bar0,而我期望bar0bar1链接一系列的承诺

function _setTime(str) { 
    return new Promise(function(resolve, reject) { 
     setTimeout(function() { 
     resolve(`bar${str} `); 
     }, 1); 
    }); 
} 
_setTime("0") 
    .then(function(str) { 
     return _setTime("1"+str) 
    }) 
    .then(function(str) { 
     console.log(str) 
    }) 
+1

那是什么'setTImeout'点? – Andy

+1

这只是一个例子 – alfredopacino

回答

2

一种解决方法:

_setTime("0").then(function(str) { 
    return _setTime("1").then(res=>str+res) 
}) 
.then(function(str) { 
    console.log(str) 
}) 
+0

整个目的是尽量找到一种方法来保持代码清洁和尽可能清晰,你的解决方案的工作原理,但我更喜欢链接'.then() 。 – alfredopacino

+1

@alfredopacino当['await'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await)终于出现时,链接'.then'函数将会过时。 – JDB

+0

是啊,因为我在电子我想我会用'await' – alfredopacino

5

的代码工作正常,正在处理“同步” ......你只需要在你是如何调用你的函数中的错误:

第一setTime("0")“收益” "bar0"

然后,您拨打setTime("1" + "bar0")哪些“返回”"bar" + "1bar0"

您的较新的字符串正被预置而非附加。

+0

你是对的:) – alfredopacino